Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Difference From 0e3a824d69673fe9 To ecb04f64a999969e
2012-05-05
| ||
10:53 | fixing the build scripts supporting MSVC check-in: 7f9c0cc55f user: sandro tags: trunk | |
2012-05-04
| ||
17:08 | fixing few GCC warnings check-in: 0e3a824d69 user: sandro tags: trunk | |
16:33 | new generation OSM tools based on ReadOSM check-in: ab480ac8a1 user: sandro tags: trunk | |
2012-04-10
| ||
10:19 | updating ./configure [supporting config.h and autoheader] check-in: ecb04f64a9 user: sandro tags: trunk | |
2012-04-06
| ||
15:44 | enhancing spatialite_osm_net (--roads / --railways) check-in: d33a43d707 user: sandro tags: trunk | |
Changes to Makefile-static-Linux.
64 64 ./static_bin/spatialite_osm_net: spatialite_osm_net.o 65 65 $(CC) spatialite_osm_net.o -o ./static_bin/spatialite_osm_net \ 66 66 /usr/local/lib/libspatialite.a \ 67 67 /usr/lib/libproj.a \ 68 68 /usr/lib/libgeos_c.a \ 69 69 /usr/lib/libgeos.a \ 70 70 /usr/local/lib/libfreexl.a \ 71 - /usr/local/lib/libreadosm.a \ 72 - /usr/lib/libexpat.a \ 73 - /usr/lib/libz.a \ 74 71 -lstdc++ -lm -lpthread -ldl 75 72 strip --strip-all ./static_bin/spatialite_osm_net 76 73 77 74 ./static_bin/spatialite_osm_map: spatialite_osm_map.o 78 75 $(CC) spatialite_osm_map.o -o ./static_bin/spatialite_osm_map \ 79 76 /usr/local/lib/libspatialite.a \ 80 77 /usr/lib/libproj.a \ 81 78 /usr/lib/libgeos_c.a \ 82 79 /usr/lib/libgeos.a \ 83 80 /usr/local/lib/libfreexl.a \ 84 - /usr/local/lib/libreadosm.a \ 85 81 /usr/lib/libexpat.a \ 86 - /usr/lib/libz.a \ 87 82 -lstdc++ -lm -lpthread -ldl 88 83 strip --strip-all ./static_bin/spatialite_osm_map 89 84 90 85 ./static_bin/spatialite_gml: spatialite_gml.o 91 86 $(CC) spatialite_gml.o -o ./static_bin/spatialite_gml \ 92 87 /usr/local/lib/libspatialite.a \ 93 88 /usr/lib/libproj.a \ ................................................................................ 101 96 ./static_bin/spatialite_osm_raw: spatialite_osm_raw.o 102 97 $(CC) spatialite_osm_raw.o -o ./static_bin/spatialite_osm_raw \ 103 98 /usr/local/lib/libspatialite.a \ 104 99 /usr/lib/libproj.a \ 105 100 /usr/lib/libgeos_c.a \ 106 101 /usr/lib/libgeos.a \ 107 102 /usr/local/lib/libfreexl.a \ 108 - /usr/local/lib/libreadosm.a \ 109 103 /usr/lib/libexpat.a \ 110 - /usr/lib/libz.a \ 111 104 -lstdc++ -lm -lpthread -ldl 112 105 strip --strip-all ./static_bin/spatialite_osm_raw 113 106 114 107 ./static_bin/spatialite_osm_filter: spatialite_osm_filter.o 115 108 $(CC) spatialite_osm_filter.o -o ./static_bin/spatialite_osm_filter \ 116 109 /usr/local/lib/libspatialite.a \ 117 110 /usr/lib/libproj.a \ 118 111 /usr/lib/libgeos_c.a \ 119 112 /usr/lib/libgeos.a \ 120 113 /usr/local/lib/libfreexl.a \ 121 114 -lstdc++ -lm -lpthread -ldl 122 115 strip --strip-all ./static_bin/spatialite_osm_filter
Changes to Makefile-static-MacOsX.
73 73 74 74 ./static_bin/spatialite_osm_net: spatialite_osm_net.o 75 75 $(CC) spatialite_osm_net.o -o ./static_bin/spatialite_osm_net \ 76 76 /usr/local/lib/libspatialite.a \ 77 77 /opt/local/lib/libproj.a \ 78 78 /opt/local/lib/libgeos_c.a \ 79 79 /opt/local/lib/libgeos.a \ 80 - /usr/local/lib/libfreexl.a \ 81 - /usr/local/lib/libreadosm.a \ 82 80 /opt/local/lib/libiconv.a \ 83 81 /opt/local/lib/libcharset.a \ 84 - /opt/local/lib/libexpat.a \ 85 - /opt/local/lib/libz.a \ 86 82 -lstdc++ -lm -lpthread -ldl 87 83 strip ./static_bin/spatialite_osm_net 88 84 89 85 ./static_bin/spatialite_osm_map: spatialite_osm_map.o 90 86 $(CC) spatialite_osm_map.o -o ./static_bin/spatialite_osm_map \ 91 87 /usr/local/lib/libspatialite.a \ 92 88 /opt/local/lib/libproj.a \ 93 89 /opt/local/lib/libgeos_c.a \ 94 90 /opt/local/lib/libgeos.a \ 95 91 /usr/local/lib/libfreexl.a \ 96 - /usr/local/lib/libreadosm.a \ 97 92 /opt/local/lib/libiconv.a \ 98 93 /opt/local/lib/libcharset.a \ 99 94 /opt/local/lib/libexpat.a \ 100 - /opt/local/lib/libz.a \ 101 95 -lstdc++ -lm -lpthread -ldl 102 96 strip ./static_bin/spatialite_osm_map 103 97 104 98 ./static_bin/spatialite_gml: spatialite_gml.o 105 99 $(CC) spatialite_gml.o -o ./static_bin/spatialite_gml \ 106 100 /usr/local/lib/libspatialite.a \ 107 101 /opt/local/lib/libproj.a \ ................................................................................ 117 111 ./static_bin/spatialite_osm_raw: spatialite_osm_raw.o 118 112 $(CC) spatialite_osm_raw.o -o ./static_bin/spatialite_osm_raw \ 119 113 /usr/local/lib/libspatialite.a \ 120 114 /opt/local/lib/libproj.a \ 121 115 /opt/local/lib/libgeos_c.a \ 122 116 /opt/local/lib/libgeos.a \ 123 117 /usr/local/lib/libfreexl.a \ 124 - /usr/local/lib/libreadosm.a \ 125 118 /opt/local/lib/libiconv.a \ 126 119 /opt/local/lib/libcharset.a \ 127 120 /opt/local/lib/libexpat.a \ 128 - /opt/local/lib/libz.a \ 129 121 -lstdc++ -lm -lpthread -ldl 130 122 strip ./static_bin/spatialite_osm_raw 131 123 132 124 ./static_bin/spatialite_osm_filter: spatialite_osm_filter.o 133 125 $(CC) spatialite_osm_filter.o -o ./static_bin/spatialite_osm_filter \ 134 126 /usr/local/lib/libspatialite.a \ 135 127 /opt/local/lib/libproj.a \
Changes to Makefile-static-MinGW.
76 76 $(GG) spatialite_osm_net.o -o ./static_bin/spatialite_osm_net.exe \ 77 77 /usr/local/lib/libspatialite.a \ 78 78 /usr/local/lib/libsqlite3.a \ 79 79 /usr/local/lib/libproj.a \ 80 80 /usr/local/lib/libgeos_c.a \ 81 81 /usr/local/lib/libgeos.a \ 82 82 /usr/local/lib/libfreexl.a \ 83 - /usr/local/lib/libreadosm.a \ 84 83 /usr/local/lib/libiconv.a \ 85 - /usr/local/lib/libexpat.a \ 86 - /usr/local/lib/libz.a \ 87 84 -lm -static-libstdc++ -static-libgcc 88 85 strip --strip-all ./static_bin/spatialite_osm_net.exe 89 86 90 87 ./static_bin/spatialite_osm_map.exe: spatialite_osm_map.o 91 88 $(GG) spatialite_osm_map.o -o ./static_bin/spatialite_osm_map.exe \ 92 89 /usr/local/lib/libspatialite.a \ 93 90 /usr/local/lib/libsqlite3.a \ 94 91 /usr/local/lib/libproj.a \ 95 92 /usr/local/lib/libgeos_c.a \ 96 93 /usr/local/lib/libgeos.a \ 97 94 /usr/local/lib/libiconv.a \ 98 95 /usr/local/lib/libfreexl.a \ 99 - /usr/local/lib/libreadosm.a \ 100 96 /usr/local/lib/libexpat.a \ 101 - /usr/local/lib/libz.a \ 102 97 -lm -static-libstdc++ -static-libgcc 103 98 strip --strip-all ./static_bin/spatialite_osm_map.exe 104 99 105 100 ./static_bin/spatialite_gml.exe: spatialite_gml.o 106 101 $(GG) spatialite_gml.o -o ./static_bin/spatialite_gml.exe \ 107 102 /usr/local/lib/libspatialite.a \ 108 103 /usr/local/lib/libsqlite3.a \ ................................................................................ 119 114 $(GG) spatialite_osm_raw.o -o ./static_bin/spatialite_osm_raw.exe \ 120 115 /usr/local/lib/libspatialite.a \ 121 116 /usr/local/lib/libsqlite3.a \ 122 117 /usr/local/lib/libproj.a \ 123 118 /usr/local/lib/libgeos_c.a \ 124 119 /usr/local/lib/libgeos.a \ 125 120 /usr/local/lib/libfreexl.a \ 126 - /usr/local/lib/libreadosm.a \ 127 121 /usr/local/lib/libiconv.a \ 128 122 /usr/local/lib/libexpat.a \ 129 - /usr/local/lib/libz.a \ 130 123 -lm -static-libstdc++ -static-libgcc 131 124 strip --strip-all ./static_bin/spatialite_osm_raw.exe 132 125 133 126 ./static_bin/spatialite_osm_filter.exe: spatialite_osm_filter.o 134 127 $(GG) spatialite_osm_filter.o -o ./static_bin/spatialite_osm_filter.exe \ 135 128 /usr/local/lib/libspatialite.a \ 136 129 /usr/local/lib/libsqlite3.a \
Changes to Makefile.am.
22 22 spatialite_osm_net_SOURCES = spatialite_osm_net.c 23 23 spatialite_osm_map_SOURCES = spatialite_osm_map.c 24 24 spatialite_osm_raw_SOURCES = spatialite_osm_raw.c 25 25 spatialite_osm_filter_SOURCES = spatialite_osm_filter.c 26 26 spatialite_gml_SOURCES = spatialite_gml.c 27 27 28 28 spatialite_osm_map_LDADD = @LIBSPATIALITE_LIBS@ \ 29 - @LIBFREEXL_LIBS@ @LIBREADOSM_LIBS@ 29 + @LIBFREEXL_LIBS@ \ 30 + -lexpat 30 31 spatialite_osm_raw_LDADD = @LIBSPATIALITE_LIBS@ \ 31 - @LIBFREEXL_LIBS@ @LIBREADOSM_LIBS@ 32 -spatialite_osm_net_LDADD = @LIBSPATIALITE_LIBS@ \ 33 - @LIBFREEXL_LIBS@ @LIBREADOSM_LIBS@ 32 + @LIBFREEXL_LIBS@ \ 33 + -lexpat 34 34 spatialite_gml_LDADD = @LIBSPATIALITE_LIBS@ \ 35 35 @LIBFREEXL_LIBS@ \ 36 36 -lexpat 37 37 spatialite_LDADD = @LIBSPATIALITE_LIBS@ \ 38 38 @LIBFREEXL_LIBS@ \ 39 39 @READLINE_LIBS@ 40 40 LDADD = @LIBSPATIALITE_LIBS@ \
Changes to Makefile.in.
41 41 spatialite_osm_filter$(EXEEXT) spatialite_gml$(EXEEXT) 42 42 subdir = . 43 43 DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ 44 44 $(srcdir)/Makefile.in $(srcdir)/config.h.in \ 45 45 $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ 46 46 config.guess config.sub depcomp install-sh ltmain.sh missing 47 47 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 48 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac 48 +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ 49 + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ 50 + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ 51 + $(top_srcdir)/configure.ac 49 52 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 50 53 $(ACLOCAL_M4) 51 54 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ 52 55 configure.lineno config.status.lineno 53 56 mkinstalldirs = $(install_sh) -d 54 57 CONFIG_HEADER = config.h 55 58 CONFIG_CLEAN_FILES = ................................................................................ 79 82 spatialite_osm_filter_LDADD = $(LDADD) 80 83 spatialite_osm_filter_DEPENDENCIES = 81 84 am_spatialite_osm_map_OBJECTS = spatialite_osm_map.$(OBJEXT) 82 85 spatialite_osm_map_OBJECTS = $(am_spatialite_osm_map_OBJECTS) 83 86 spatialite_osm_map_DEPENDENCIES = 84 87 am_spatialite_osm_net_OBJECTS = spatialite_osm_net.$(OBJEXT) 85 88 spatialite_osm_net_OBJECTS = $(am_spatialite_osm_net_OBJECTS) 89 +spatialite_osm_net_LDADD = $(LDADD) 86 90 spatialite_osm_net_DEPENDENCIES = 87 91 am_spatialite_osm_raw_OBJECTS = spatialite_osm_raw.$(OBJEXT) 88 92 spatialite_osm_raw_OBJECTS = $(am_spatialite_osm_raw_OBJECTS) 89 93 spatialite_osm_raw_DEPENDENCIES = 90 94 am_spatialite_tool_OBJECTS = spatialite_tool.$(OBJEXT) 91 95 spatialite_tool_OBJECTS = $(am_spatialite_tool_OBJECTS) 92 96 spatialite_tool_LDADD = $(LDADD) ................................................................................ 166 170 INSTALL_SCRIPT = @INSTALL_SCRIPT@ 167 171 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 168 172 LD = @LD@ 169 173 LDFLAGS = @LDFLAGS@ 170 174 LIBFREEXL_CFLAGS = @LIBFREEXL_CFLAGS@ 171 175 LIBFREEXL_LIBS = @LIBFREEXL_LIBS@ 172 176 LIBOBJS = @LIBOBJS@ 173 -LIBREADOSM_CFLAGS = @LIBREADOSM_CFLAGS@ 174 -LIBREADOSM_LIBS = @LIBREADOSM_LIBS@ 175 177 LIBS = @LIBS@ 176 178 LIBSPATIALITE_CFLAGS = @LIBSPATIALITE_CFLAGS@ 177 179 LIBSPATIALITE_LIBS = @LIBSPATIALITE_LIBS@ 178 180 LIBTOOL = @LIBTOOL@ 179 181 LIPO = @LIPO@ 180 182 LN_S = @LN_S@ 181 183 LTLIBOBJS = @LTLIBOBJS@ ................................................................................ 269 271 exif_loader_SOURCES = exif_loader.c 270 272 spatialite_osm_net_SOURCES = spatialite_osm_net.c 271 273 spatialite_osm_map_SOURCES = spatialite_osm_map.c 272 274 spatialite_osm_raw_SOURCES = spatialite_osm_raw.c 273 275 spatialite_osm_filter_SOURCES = spatialite_osm_filter.c 274 276 spatialite_gml_SOURCES = spatialite_gml.c 275 277 spatialite_osm_map_LDADD = @LIBSPATIALITE_LIBS@ \ 276 - @LIBFREEXL_LIBS@ @LIBREADOSM_LIBS@ 278 + @LIBFREEXL_LIBS@ \ 279 + -lexpat 277 280 278 281 spatialite_osm_raw_LDADD = @LIBSPATIALITE_LIBS@ \ 279 - @LIBFREEXL_LIBS@ @LIBREADOSM_LIBS@ 280 - 281 -spatialite_osm_net_LDADD = @LIBSPATIALITE_LIBS@ \ 282 - @LIBFREEXL_LIBS@ @LIBREADOSM_LIBS@ 282 + @LIBFREEXL_LIBS@ \ 283 + -lexpat 283 284 284 285 spatialite_gml_LDADD = @LIBSPATIALITE_LIBS@ \ 285 286 @LIBFREEXL_LIBS@ \ 286 287 -lexpat 287 288 288 289 spatialite_LDADD = @LIBSPATIALITE_LIBS@ \ 289 290 @LIBFREEXL_LIBS@ \ ................................................................................ 305 306 .SUFFIXES: .c .lo .o .obj 306 307 am--refresh: 307 308 @: 308 309 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) 309 310 @for dep in $?; do \ 310 311 case '$(am__configure_deps)' in \ 311 312 *$$dep*) \ 312 - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ 313 - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ 313 + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ 314 + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ 314 315 && exit 0; \ 315 316 exit 1;; \ 316 317 esac; \ 317 318 done; \ 318 - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ 319 + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ 319 320 $(am__cd) $(top_srcdir) && \ 320 - $(AUTOMAKE) --foreign Makefile 321 + $(AUTOMAKE) --gnu Makefile 321 322 .PRECIOUS: Makefile 322 323 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 323 324 @case '$?' in \ 324 325 *config.status*) \ 325 326 echo ' $(SHELL) ./config.status'; \ 326 327 $(SHELL) ./config.status;; \ 327 328 *) \
Changes to aclocal.m4.
15 15 [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl 16 16 m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, 17 17 [m4_warning([this file was generated for autoconf 2.68. 18 18 You have another version of autoconf. It may work, but is not guaranteed to. 19 19 If you have problems, you may need to regenerate the build system entirely. 20 20 To do so, use the procedure documented by the package, typically `autoreconf'.])]) 21 21 22 -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- 23 -# 24 -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 25 -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, 26 -# Inc. 27 -# Written by Gordon Matzigkeit, 1996 28 -# 29 -# This file is free software; the Free Software Foundation gives 30 -# unlimited permission to copy and/or distribute it, with or without 31 -# modifications, as long as this notice is preserved. 32 - 33 -m4_define([_LT_COPYING], [dnl 34 -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 35 -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, 36 -# Inc. 37 -# Written by Gordon Matzigkeit, 1996 38 -# 39 -# This file is part of GNU Libtool. 40 -# 41 -# GNU Libtool is free software; you can redistribute it and/or 42 -# modify it under the terms of the GNU General Public License as 43 -# published by the Free Software Foundation; either version 2 of 44 -# the License, or (at your option) any later version. 45 -# 46 -# As a special exception to the GNU General Public License, 47 -# if you distribute this file as part of a program or library that 48 -# is built using GNU Libtool, you may include this file under the 49 -# same distribution terms that you use for the rest of that program. 50 -# 51 -# GNU Libtool is distributed in the hope that it will be useful, 52 -# but WITHOUT ANY WARRANTY; without even the implied warranty of 53 -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 54 -# GNU General Public License for more details. 55 -# 56 -# You should have received a copy of the GNU General Public License 57 -# along with GNU Libtool; see the file COPYING. If not, a copy 58 -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or 59 -# obtained by writing to the Free Software Foundation, Inc., 60 -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 61 -]) 62 - 63 -# serial 57 LT_INIT 64 - 65 - 66 -# LT_PREREQ(VERSION) 67 -# ------------------ 68 -# Complain and exit if this libtool version is less that VERSION. 69 -m4_defun([LT_PREREQ], 70 -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, 71 - [m4_default([$3], 72 - [m4_fatal([Libtool version $1 or higher is required], 73 - 63)])], 74 - [$2])]) 75 - 76 - 77 -# _LT_CHECK_BUILDDIR 78 -# ------------------ 79 -# Complain if the absolute build directory name contains unusual characters 80 -m4_defun([_LT_CHECK_BUILDDIR], 81 -[case `pwd` in 82 - *\ * | *\ *) 83 - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; 84 -esac 85 -]) 86 - 87 - 88 -# LT_INIT([OPTIONS]) 89 -# ------------------ 90 -AC_DEFUN([LT_INIT], 91 -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT 92 -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl 93 -AC_BEFORE([$0], [LT_LANG])dnl 94 -AC_BEFORE([$0], [LT_OUTPUT])dnl 95 -AC_BEFORE([$0], [LTDL_INIT])dnl 96 -m4_require([_LT_CHECK_BUILDDIR])dnl 97 - 98 -dnl Autoconf doesn't catch unexpanded LT_ macros by default: 99 -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl 100 -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl 101 -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 102 -dnl unless we require an AC_DEFUNed macro: 103 -AC_REQUIRE([LTOPTIONS_VERSION])dnl 104 -AC_REQUIRE([LTSUGAR_VERSION])dnl 105 -AC_REQUIRE([LTVERSION_VERSION])dnl 106 -AC_REQUIRE([LTOBSOLETE_VERSION])dnl 107 -m4_require([_LT_PROG_LTMAIN])dnl 108 - 109 -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) 110 - 111 -dnl Parse OPTIONS 112 -_LT_SET_OPTIONS([$0], [$1]) 113 - 114 -# This can be used to rebuild libtool when needed 115 -LIBTOOL_DEPS="$ltmain" 116 - 117 -# Always use our own libtool. 118 -LIBTOOL='$(SHELL) $(top_builddir)/libtool' 119 -AC_SUBST(LIBTOOL)dnl 120 - 121 -_LT_SETUP 122 - 123 -# Only expand once: 124 -m4_define([LT_INIT]) 125 -])# LT_INIT 126 - 127 -# Old names: 128 -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) 129 -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) 130 -dnl aclocal-1.4 backwards compatibility: 131 -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) 132 -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) 133 - 134 - 135 -# _LT_CC_BASENAME(CC) 136 -# ------------------- 137 -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. 138 -m4_defun([_LT_CC_BASENAME], 139 -[for cc_temp in $1""; do 140 - case $cc_temp in 141 - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; 142 - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; 143 - \-*) ;; 144 - *) break;; 145 - esac 146 -done 147 -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` 148 -]) 149 - 150 - 151 -# _LT_FILEUTILS_DEFAULTS 152 -# ---------------------- 153 -# It is okay to use these file commands and assume they have been set 154 -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. 155 -m4_defun([_LT_FILEUTILS_DEFAULTS], 156 -[: ${CP="cp -f"} 157 -: ${MV="mv -f"} 158 -: ${RM="rm -f"} 159 -])# _LT_FILEUTILS_DEFAULTS 160 - 161 - 162 -# _LT_SETUP 163 -# --------- 164 -m4_defun([_LT_SETUP], 165 -[AC_REQUIRE([AC_CANONICAL_HOST])dnl 166 -AC_REQUIRE([AC_CANONICAL_BUILD])dnl 167 -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl 168 -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl 169 - 170 -_LT_DECL([], [host_alias], [0], [The host system])dnl 171 -_LT_DECL([], [host], [0])dnl 172 -_LT_DECL([], [host_os], [0])dnl 173 -dnl 174 -_LT_DECL([], [build_alias], [0], [The build system])dnl 175 -_LT_DECL([], [build], [0])dnl 176 -_LT_DECL([], [build_os], [0])dnl 177 -dnl 178 -AC_REQUIRE([AC_PROG_CC])dnl 179 -AC_REQUIRE([LT_PATH_LD])dnl 180 -AC_REQUIRE([LT_PATH_NM])dnl 181 -dnl 182 -AC_REQUIRE([AC_PROG_LN_S])dnl 183 -test -z "$LN_S" && LN_S="ln -s" 184 -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl 185 -dnl 186 -AC_REQUIRE([LT_CMD_MAX_LEN])dnl 187 -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl 188 -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl 189 -dnl 190 -m4_require([_LT_FILEUTILS_DEFAULTS])dnl 191 -m4_require([_LT_CHECK_SHELL_FEATURES])dnl 192 -m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl 193 -m4_require([_LT_CMD_RELOAD])dnl 194 -m4_require([_LT_CHECK_MAGIC_METHOD])dnl 195 -m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl 196 -m4_require([_LT_CMD_OLD_ARCHIVE])dnl 197 -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl 198 -m4_require([_LT_WITH_SYSROOT])dnl 199 - 200 -_LT_CONFIG_LIBTOOL_INIT([ 201 -# See if we are running on zsh, and set the options which allow our 202 -# commands through without removal of \ escapes INIT. 203 -if test -n "\${ZSH_VERSION+set}" ; then 204 - setopt NO_GLOB_SUBST 205 -fi 206 -]) 207 -if test -n "${ZSH_VERSION+set}" ; then 208 - setopt NO_GLOB_SUBST 209 -fi 210 - 211 -_LT_CHECK_OBJDIR 212 - 213 -m4_require([_LT_TAG_COMPILER])dnl 214 - 215 -case $host_os in 216 -aix3*) 217 - # AIX sometimes has problems with the GCC collect2 program. For some 218 - # reason, if we set the COLLECT_NAMES environment variable, the problems 219 - # vanish in a puff of smoke. 220 - if test "X${COLLECT_NAMES+set}" != Xset; then 221 - COLLECT_NAMES= 222 - export COLLECT_NAMES 223 - fi 224 - ;; 225 -esac 226 - 227 -# Global variables: 228 -ofile=libtool 229 -can_build_shared=yes 230 - 231 -# All known linkers require a `.a' archive for static linking (except MSVC, 232 -# which needs '.lib'). 233 -libext=a 234 - 235 -with_gnu_ld="$lt_cv_prog_gnu_ld" 236 - 237 -old_CC="$CC" 238 -old_CFLAGS="$CFLAGS" 239 - 240 -# Set sane defaults for various variables 241 -test -z "$CC" && CC=cc 242 -test -z "$LTCC" && LTCC=$CC 243 -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS 244 -test -z "$LD" && LD=ld 245 -test -z "$ac_objext" && ac_objext=o 246 - 247 -_LT_CC_BASENAME([$compiler]) 248 - 249 -# Only perform the check for file, if the check method requires it 250 -test -z "$MAGIC_CMD" && MAGIC_CMD=file 251 -case $deplibs_check_method in 252 -file_magic*) 253 - if test "$file_magic_cmd" = '$MAGIC_CMD'; then 254 - _LT_PATH_MAGIC 255 - fi 256 - ;; 257 -esac 258 - 259 -# Use C for the default configuration in the libtool script 260 -LT_SUPPORTED_TAG([CC]) 261 -_LT_LANG_C_CONFIG 262 -_LT_LANG_DEFAULT_CONFIG 263 -_LT_CONFIG_COMMANDS 264 -])# _LT_SETUP 265 - 266 - 267 -# _LT_PREPARE_SED_QUOTE_VARS 268 -# -------------------------- 269 -# Define a few sed substitution that help us do robust quoting. 270 -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], 271 -[# Backslashify metacharacters that are still active within 272 -# double-quoted strings. 273 -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' 274 - 275 -# Same as above, but do not quote variable references. 276 -double_quote_subst='s/\([["`\\]]\)/\\\1/g' 277 - 278 -# Sed substitution to delay expansion of an escaped shell variable in a 279 -# double_quote_subst'ed string. 280 -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' 281 - 282 -# Sed substitution to delay expansion of an escaped single quote. 283 -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' 284 - 285 -# Sed substitution to avoid accidental globbing in evaled expressions 286 -no_glob_subst='s/\*/\\\*/g' 287 -]) 288 - 289 -# _LT_PROG_LTMAIN 290 -# --------------- 291 -# Note that this code is called both from `configure', and `config.status' 292 -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, 293 -# `config.status' has no value for ac_aux_dir unless we are using Automake, 294 -# so we pass a copy along to make sure it has a sensible value anyway. 295 -m4_defun([_LT_PROG_LTMAIN], 296 -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl 297 -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) 298 -ltmain="$ac_aux_dir/ltmain.sh" 299 -])# _LT_PROG_LTMAIN 300 - 301 - 302 - 303 -# So that we can recreate a full libtool script including additional 304 -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS 305 -# in macros and then make a single call at the end using the `libtool' 306 -# label. 307 - 308 - 309 -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) 310 -# ---------------------------------------- 311 -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. 312 -m4_define([_LT_CONFIG_LIBTOOL_INIT], 313 -[m4_ifval([$1], 314 - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], 315 - [$1 316 -])])]) 317 - 318 -# Initialize. 319 -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) 320 - 321 - 322 -# _LT_CONFIG_LIBTOOL([COMMANDS]) 323 -# ------------------------------ 324 -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. 325 -m4_define([_LT_CONFIG_LIBTOOL], 326 -[m4_ifval([$1], 327 - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], 328 - [$1 329 -])])]) 330 - 331 -# Initialize. 332 -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) 333 - 334 - 335 -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) 336 -# ----------------------------------------------------- 337 -m4_defun([_LT_CONFIG_SAVE_COMMANDS], 338 -[_LT_CONFIG_LIBTOOL([$1]) 339 -_LT_CONFIG_LIBTOOL_INIT([$2]) 340 -]) 341 - 342 - 343 -# _LT_FORMAT_COMMENT([COMMENT]) 344 -# ----------------------------- 345 -# Add leading comment marks to the start of each line, and a trailing 346 -# full-stop to the whole comment if one is not present already. 347 -m4_define([_LT_FORMAT_COMMENT], 348 -[m4_ifval([$1], [ 349 -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], 350 - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) 351 -)]) 352 - 353 - 354 - 355 - 356 - 357 -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) 358 -# ------------------------------------------------------------------- 359 -# CONFIGNAME is the name given to the value in the libtool script. 360 -# VARNAME is the (base) name used in the configure script. 361 -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on 362 -# VARNAME. Any other value will be used directly. 363 -m4_define([_LT_DECL], 364 -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], 365 - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], 366 - [m4_ifval([$1], [$1], [$2])]) 367 - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) 368 - m4_ifval([$4], 369 - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) 370 - lt_dict_add_subkey([lt_decl_dict], [$2], 371 - [tagged?], [m4_ifval([$5], [yes], [no])])]) 372 -]) 373 - 374 - 375 -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) 376 -# -------------------------------------------------------- 377 -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) 378 - 379 - 380 -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) 381 -# ------------------------------------------------ 382 -m4_define([lt_decl_tag_varnames], 383 -[_lt_decl_filter([tagged?], [yes], $@)]) 384 - 385 - 386 -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) 387 -# --------------------------------------------------------- 388 -m4_define([_lt_decl_filter], 389 -[m4_case([$#], 390 - [0], [m4_fatal([$0: too few arguments: $#])], 391 - [1], [m4_fatal([$0: too few arguments: $#: $1])], 392 - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], 393 - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], 394 - [lt_dict_filter([lt_decl_dict], $@)])[]dnl 395 -]) 396 - 397 - 398 -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) 399 -# -------------------------------------------------- 400 -m4_define([lt_decl_quote_varnames], 401 -[_lt_decl_filter([value], [1], $@)]) 402 - 403 - 404 -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) 405 -# --------------------------------------------------- 406 -m4_define([lt_decl_dquote_varnames], 407 -[_lt_decl_filter([value], [2], $@)]) 408 - 409 - 410 -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) 411 -# --------------------------------------------------- 412 -m4_define([lt_decl_varnames_tagged], 413 -[m4_assert([$# <= 2])dnl 414 -_$0(m4_quote(m4_default([$1], [[, ]])), 415 - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), 416 - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) 417 -m4_define([_lt_decl_varnames_tagged], 418 -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) 419 - 420 - 421 -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) 422 -# ------------------------------------------------ 423 -m4_define([lt_decl_all_varnames], 424 -[_$0(m4_quote(m4_default([$1], [[, ]])), 425 - m4_if([$2], [], 426 - m4_quote(lt_decl_varnames), 427 - m4_quote(m4_shift($@))))[]dnl 428 -]) 429 -m4_define([_lt_decl_all_varnames], 430 -[lt_join($@, lt_decl_varnames_tagged([$1], 431 - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl 432 -]) 433 - 434 - 435 -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) 436 -# ------------------------------------ 437 -# Quote a variable value, and forward it to `config.status' so that its 438 -# declaration there will have the same value as in `configure'. VARNAME 439 -# must have a single quote delimited value for this to work. 440 -m4_define([_LT_CONFIG_STATUS_DECLARE], 441 -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) 442 - 443 - 444 -# _LT_CONFIG_STATUS_DECLARATIONS 445 -# ------------------------------ 446 -# We delimit libtool config variables with single quotes, so when 447 -# we write them to config.status, we have to be sure to quote all 448 -# embedded single quotes properly. In configure, this macro expands 449 -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: 450 -# 451 -# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' 452 -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], 453 -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), 454 - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) 455 - 456 - 457 -# _LT_LIBTOOL_TAGS 458 -# ---------------- 459 -# Output comment and list of tags supported by the script 460 -m4_defun([_LT_LIBTOOL_TAGS], 461 -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl 462 -available_tags="_LT_TAGS"dnl 463 -]) 464 - 465 - 466 -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) 467 -# ----------------------------------- 468 -# Extract the dictionary values for VARNAME (optionally with TAG) and 469 -# expand to a commented shell variable setting: 470 -# 471 -# # Some comment about what VAR is for. 472 -# visible_name=$lt_internal_name 473 -m4_define([_LT_LIBTOOL_DECLARE], 474 -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], 475 - [description])))[]dnl 476 -m4_pushdef([_libtool_name], 477 - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl 478 -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), 479 - [0], [_libtool_name=[$]$1], 480 - [1], [_libtool_name=$lt_[]$1], 481 - [2], [_libtool_name=$lt_[]$1], 482 - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl 483 -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl 484 -]) 485 - 486 - 487 -# _LT_LIBTOOL_CONFIG_VARS 488 -# ----------------------- 489 -# Produce commented declarations of non-tagged libtool config variables 490 -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' 491 -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG 492 -# section) are produced by _LT_LIBTOOL_TAG_VARS. 493 -m4_defun([_LT_LIBTOOL_CONFIG_VARS], 494 -[m4_foreach([_lt_var], 495 - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), 496 - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) 497 - 498 - 499 -# _LT_LIBTOOL_TAG_VARS(TAG) 500 -# ------------------------- 501 -m4_define([_LT_LIBTOOL_TAG_VARS], 502 -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), 503 - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) 504 - 505 - 506 -# _LT_TAGVAR(VARNAME, [TAGNAME]) 507 -# ------------------------------ 508 -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) 509 - 510 - 511 -# _LT_CONFIG_COMMANDS 512 -# ------------------- 513 -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of 514 -# variables for single and double quote escaping we saved from calls 515 -# to _LT_DECL, we can put quote escaped variables declarations 516 -# into `config.status', and then the shell code to quote escape them in 517 -# for loops in `config.status'. Finally, any additional code accumulated 518 -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. 519 -m4_defun([_LT_CONFIG_COMMANDS], 520 -[AC_PROVIDE_IFELSE([LT_OUTPUT], 521 - dnl If the libtool generation code has been placed in $CONFIG_LT, 522 - dnl instead of duplicating it all over again into config.status, 523 - dnl then we will have config.status run $CONFIG_LT later, so it 524 - dnl needs to know what name is stored there: 525 - [AC_CONFIG_COMMANDS([libtool], 526 - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], 527 - dnl If the libtool generation code is destined for config.status, 528 - dnl expand the accumulated commands and init code now: 529 - [AC_CONFIG_COMMANDS([libtool], 530 - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) 531 -])#_LT_CONFIG_COMMANDS 532 - 533 - 534 -# Initialize. 535 -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], 536 -[ 537 - 538 -# The HP-UX ksh and POSIX shell print the target directory to stdout 539 -# if CDPATH is set. 540 -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 541 - 542 -sed_quote_subst='$sed_quote_subst' 543 -double_quote_subst='$double_quote_subst' 544 -delay_variable_subst='$delay_variable_subst' 545 -_LT_CONFIG_STATUS_DECLARATIONS 546 -LTCC='$LTCC' 547 -LTCFLAGS='$LTCFLAGS' 548 -compiler='$compiler_DEFAULT' 549 - 550 -# A function that is used when there is no print builtin or printf. 551 -func_fallback_echo () 552 -{ 553 - eval 'cat <<_LTECHO_EOF 554 -\$[]1 555 -_LTECHO_EOF' 556 -} 557 - 558 -# Quote evaled strings. 559 -for var in lt_decl_all_varnames([[ \ 560 -]], lt_decl_quote_varnames); do 561 - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in 562 - *[[\\\\\\\`\\"\\\$]]*) 563 - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" 564 - ;; 565 - *) 566 - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" 567 - ;; 568 - esac 569 -done 570 - 571 -# Double-quote double-evaled strings. 572 -for var in lt_decl_all_varnames([[ \ 573 -]], lt_decl_dquote_varnames); do 574 - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in 575 - *[[\\\\\\\`\\"\\\$]]*) 576 - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" 577 - ;; 578 - *) 579 - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" 580 - ;; 581 - esac 582 -done 583 - 584 -_LT_OUTPUT_LIBTOOL_INIT 585 -]) 586 - 587 -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) 588 -# ------------------------------------ 589 -# Generate a child script FILE with all initialization necessary to 590 -# reuse the environment learned by the parent script, and make the 591 -# file executable. If COMMENT is supplied, it is inserted after the 592 -# `#!' sequence but before initialization text begins. After this 593 -# macro, additional text can be appended to FILE to form the body of 594 -# the child script. The macro ends with non-zero status if the 595 -# file could not be fully written (such as if the disk is full). 596 -m4_ifdef([AS_INIT_GENERATED], 597 -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], 598 -[m4_defun([_LT_GENERATED_FILE_INIT], 599 -[m4_require([AS_PREPARE])]dnl 600 -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl 601 -[lt_write_fail=0 602 -cat >$1 <<_ASEOF || lt_write_fail=1 603 -#! $SHELL 604 -# Generated by $as_me. 605 -$2 606 -SHELL=\${CONFIG_SHELL-$SHELL} 607 -export SHELL 608 -_ASEOF 609 -cat >>$1 <<\_ASEOF || lt_write_fail=1 610 -AS_SHELL_SANITIZE 611 -_AS_PREPARE 612 -exec AS_MESSAGE_FD>&1 613 -_ASEOF 614 -test $lt_write_fail = 0 && chmod +x $1[]dnl 615 -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT 616 - 617 -# LT_OUTPUT 618 -# --------- 619 -# This macro allows early generation of the libtool script (before 620 -# AC_OUTPUT is called), incase it is used in configure for compilation 621 -# tests. 622 -AC_DEFUN([LT_OUTPUT], 623 -[: ${CONFIG_LT=./config.lt} 624 -AC_MSG_NOTICE([creating $CONFIG_LT]) 625 -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], 626 -[# Run this file to recreate a libtool stub with the current configuration.]) 627 - 628 -cat >>"$CONFIG_LT" <<\_LTEOF 629 -lt_cl_silent=false 630 -exec AS_MESSAGE_LOG_FD>>config.log 631 -{ 632 - echo 633 - AS_BOX([Running $as_me.]) 634 -} >&AS_MESSAGE_LOG_FD 635 - 636 -lt_cl_help="\ 637 -\`$as_me' creates a local libtool stub from the current configuration, 638 -for use in further configure time tests before the real libtool is 639 -generated. 640 - 641 -Usage: $[0] [[OPTIONS]] 642 - 643 - -h, --help print this help, then exit 644 - -V, --version print version number, then exit 645 - -q, --quiet do not print progress messages 646 - -d, --debug don't remove temporary files 647 - 648 -Report bugs to <bug-libtool@gnu.org>." 649 - 650 -lt_cl_version="\ 651 -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl 652 -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) 653 -configured by $[0], generated by m4_PACKAGE_STRING. 654 - 655 -Copyright (C) 2010 Free Software Foundation, Inc. 656 -This config.lt script is free software; the Free Software Foundation 657 -gives unlimited permision to copy, distribute and modify it." 658 - 659 -while test $[#] != 0 660 -do 661 - case $[1] in 662 - --version | --v* | -V ) 663 - echo "$lt_cl_version"; exit 0 ;; 664 - --help | --h* | -h ) 665 - echo "$lt_cl_help"; exit 0 ;; 666 - --debug | --d* | -d ) 667 - debug=: ;; 668 - --quiet | --q* | --silent | --s* | -q ) 669 - lt_cl_silent=: ;; 670 - 671 - -*) AC_MSG_ERROR([unrecognized option: $[1] 672 -Try \`$[0] --help' for more information.]) ;; 673 - 674 - *) AC_MSG_ERROR([unrecognized argument: $[1] 675 -Try \`$[0] --help' for more information.]) ;; 676 - esac 677 - shift 678 -done 679 - 680 -if $lt_cl_silent; then 681 - exec AS_MESSAGE_FD>/dev/null 682 -fi 683 -_LTEOF 684 - 685 -cat >>"$CONFIG_LT" <<_LTEOF 686 -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT 687 -_LTEOF 688 - 689 -cat >>"$CONFIG_LT" <<\_LTEOF 690 -AC_MSG_NOTICE([creating $ofile]) 691 -_LT_OUTPUT_LIBTOOL_COMMANDS 692 -AS_EXIT(0) 693 -_LTEOF 694 -chmod +x "$CONFIG_LT" 695 - 696 -# configure is writing to config.log, but config.lt does its own redirection, 697 -# appending to config.log, which fails on DOS, as config.log is still kept 698 -# open by configure. Here we exec the FD to /dev/null, effectively closing 699 -# config.log, so it can be properly (re)opened and appended to by config.lt. 700 -lt_cl_success=: 701 -test "$silent" = yes && 702 - lt_config_lt_args="$lt_config_lt_args --quiet" 703 -exec AS_MESSAGE_LOG_FD>/dev/null 704 -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false 705 -exec AS_MESSAGE_LOG_FD>>config.log 706 -$lt_cl_success || AS_EXIT(1) 707 -])# LT_OUTPUT 708 - 709 - 710 -# _LT_CONFIG(TAG) 711 -# --------------- 712 -# If TAG is the built-in tag, create an initial libtool script with a 713 -# default configuration from the untagged config vars. Otherwise add code 714 -# to config.status for appending the configuration named by TAG from the 715 -# matching tagged config vars. 716 -m4_defun([_LT_CONFIG], 717 -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl 718 -_LT_CONFIG_SAVE_COMMANDS([ 719 - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl 720 - m4_if(_LT_TAG, [C], [ 721 - # See if we are running on zsh, and set the options which allow our 722 - # commands through without removal of \ escapes. 723 - if test -n "${ZSH_VERSION+set}" ; then 724 - setopt NO_GLOB_SUBST 725 - fi 726 - 727 - cfgfile="${ofile}T" 728 - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 729 - $RM "$cfgfile" 730 - 731 - cat <<_LT_EOF >> "$cfgfile" 732 -#! $SHELL 733 - 734 -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. 735 -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION 736 -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: 737 -# NOTE: Changes made to this file will be lost: look at ltmain.sh. 738 -# 739 -_LT_COPYING 740 -_LT_LIBTOOL_TAGS 741 - 742 -# ### BEGIN LIBTOOL CONFIG 743 -_LT_LIBTOOL_CONFIG_VARS 744 -_LT_LIBTOOL_TAG_VARS 745 -# ### END LIBTOOL CONFIG 746 - 747 -_LT_EOF 748 - 749 - case $host_os in 750 - aix3*) 751 - cat <<\_LT_EOF >> "$cfgfile" 752 -# AIX sometimes has problems with the GCC collect2 program. For some 753 -# reason, if we set the COLLECT_NAMES environment variable, the problems 754 -# vanish in a puff of smoke. 755 -if test "X${COLLECT_NAMES+set}" != Xset; then 756 - COLLECT_NAMES= 757 - export COLLECT_NAMES 758 -fi 759 -_LT_EOF 760 - ;; 761 - esac 762 - 763 - _LT_PROG_LTMAIN 764 - 765 - # We use sed instead of cat because bash on DJGPP gets confused if 766 - # if finds mixed CR/LF and LF-only lines. Since sed operates in 767 - # text mode, it properly converts lines to CR/LF. This bash problem 768 - # is reportedly fixed, but why not run on old versions too? 769 - sed '$q' "$ltmain" >> "$cfgfile" \ 770 - || (rm -f "$cfgfile"; exit 1) 771 - 772 - _LT_PROG_REPLACE_SHELLFNS 773 - 774 - mv -f "$cfgfile" "$ofile" || 775 - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") 776 - chmod +x "$ofile" 777 -], 778 -[cat <<_LT_EOF >> "$ofile" 779 - 780 -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded 781 -dnl in a comment (ie after a #). 782 -# ### BEGIN LIBTOOL TAG CONFIG: $1 783 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) 784 -# ### END LIBTOOL TAG CONFIG: $1 785 -_LT_EOF 786 -])dnl /m4_if 787 -], 788 -[m4_if([$1], [], [ 789 - PACKAGE='$PACKAGE' 790 - VERSION='$VERSION' 791 - TIMESTAMP='$TIMESTAMP' 792 - RM='$RM' 793 - ofile='$ofile'], []) 794 -])dnl /_LT_CONFIG_SAVE_COMMANDS 795 -])# _LT_CONFIG 796 - 797 - 798 -# LT_SUPPORTED_TAG(TAG) 799 -# --------------------- 800 -# Trace this macro to discover what tags are supported by the libtool 801 -# --tag option, using: 802 -# autoconf --trace 'LT_SUPPORTED_TAG:$1' 803 -AC_DEFUN([LT_SUPPORTED_TAG], []) 804 - 805 - 806 -# C support is built-in for now 807 -m4_define([_LT_LANG_C_enabled], []) 808 -m4_define([_LT_TAGS], []) 809 - 810 - 811 -# LT_LANG(LANG) 812 -# ------------- 813 -# Enable libtool support for the given language if not already enabled. 814 -AC_DEFUN([LT_LANG], 815 -[AC_BEFORE([$0], [LT_OUTPUT])dnl 816 -m4_case([$1], 817 - [C], [_LT_LANG(C)], 818 - [C++], [_LT_LANG(CXX)], 819 - [Java], [_LT_LANG(GCJ)], 820 - [Fortran 77], [_LT_LANG(F77)], 821 - [Fortran], [_LT_LANG(FC)], 822 - [Windows Resource], [_LT_LANG(RC)], 823 - [m4_ifdef([_LT_LANG_]$1[_CONFIG], 824 - [_LT_LANG($1)], 825 - [m4_fatal([$0: unsupported language: "$1"])])])dnl 826 -])# LT_LANG 827 - 828 - 829 -# _LT_LANG(LANGNAME) 830 -# ------------------ 831 -m4_defun([_LT_LANG], 832 -[m4_ifdef([_LT_LANG_]$1[_enabled], [], 833 - [LT_SUPPORTED_TAG([$1])dnl 834 - m4_append([_LT_TAGS], [$1 ])dnl 835 - m4_define([_LT_LANG_]$1[_enabled], [])dnl 836 - _LT_LANG_$1_CONFIG($1)])dnl 837 -])# _LT_LANG 838 - 839 - 840 -# _LT_LANG_DEFAULT_CONFIG 841 -# ----------------------- 842 -m4_defun([_LT_LANG_DEFAULT_CONFIG], 843 -[AC_PROVIDE_IFELSE([AC_PROG_CXX], 844 - [LT_LANG(CXX)], 845 - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) 846 - 847 -AC_PROVIDE_IFELSE([AC_PROG_F77], 848 - [LT_LANG(F77)], 849 - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) 850 - 851 -AC_PROVIDE_IFELSE([AC_PROG_FC], 852 - [LT_LANG(FC)], 853 - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) 854 - 855 -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal 856 -dnl pulling things in needlessly. 857 -AC_PROVIDE_IFELSE([AC_PROG_GCJ], 858 - [LT_LANG(GCJ)], 859 - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], 860 - [LT_LANG(GCJ)], 861 - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], 862 - [LT_LANG(GCJ)], 863 - [m4_ifdef([AC_PROG_GCJ], 864 - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) 865 - m4_ifdef([A][M_PROG_GCJ], 866 - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) 867 - m4_ifdef([LT_PROG_GCJ], 868 - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) 869 - 870 -AC_PROVIDE_IFELSE([LT_PROG_RC], 871 - [LT_LANG(RC)], 872 - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) 873 -])# _LT_LANG_DEFAULT_CONFIG 874 - 875 -# Obsolete macros: 876 -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) 877 -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) 878 -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) 879 -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) 880 -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) 881 -dnl aclocal-1.4 backwards compatibility: 882 -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) 883 -dnl AC_DEFUN([AC_LIBTOOL_F77], []) 884 -dnl AC_DEFUN([AC_LIBTOOL_FC], []) 885 -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) 886 -dnl AC_DEFUN([AC_LIBTOOL_RC], []) 887 - 888 - 889 -# _LT_TAG_COMPILER 890 -# ---------------- 891 -m4_defun([_LT_TAG_COMPILER], 892 -[AC_REQUIRE([AC_PROG_CC])dnl 893 - 894 -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl 895 -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl 896 -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl 897 -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl 898 - 899 -# If no C compiler was specified, use CC. 900 -LTCC=${LTCC-"$CC"} 901 - 902 -# If no C compiler flags were specified, use CFLAGS. 903 -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} 904 - 905 -# Allow CC to be a program name with arguments. 906 -compiler=$CC 907 -])# _LT_TAG_COMPILER 908 - 909 - 910 -# _LT_COMPILER_BOILERPLATE 911 -# ------------------------ 912 -# Check for compiler boilerplate output or warnings with 913 -# the simple compiler test code. 914 -m4_defun([_LT_COMPILER_BOILERPLATE], 915 -[m4_require([_LT_DECL_SED])dnl 916 -ac_outfile=conftest.$ac_objext 917 -echo "$lt_simple_compile_test_code" >conftest.$ac_ext 918 -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err 919 -_lt_compiler_boilerplate=`cat conftest.err` 920 -$RM conftest* 921 -])# _LT_COMPILER_BOILERPLATE 922 - 923 - 924 -# _LT_LINKER_BOILERPLATE 925 -# ---------------------- 926 -# Check for linker boilerplate output or warnings with 927 -# the simple link test code. 928 -m4_defun([_LT_LINKER_BOILERPLATE], 929 -[m4_require([_LT_DECL_SED])dnl 930 -ac_outfile=conftest.$ac_objext 931 -echo "$lt_simple_link_test_code" >conftest.$ac_ext 932 -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err 933 -_lt_linker_boilerplate=`cat conftest.err` 934 -$RM -r conftest* 935 -])# _LT_LINKER_BOILERPLATE 936 - 937 -# _LT_REQUIRED_DARWIN_CHECKS 938 -# ------------------------- 939 -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ 940 - case $host_os in 941 - rhapsody* | darwin*) 942 - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) 943 - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) 944 - AC_CHECK_TOOL([LIPO], [lipo], [:]) 945 - AC_CHECK_TOOL([OTOOL], [otool], [:]) 946 - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) 947 - _LT_DECL([], [DSYMUTIL], [1], 948 - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) 949 - _LT_DECL([], [NMEDIT], [1], 950 - [Tool to change global to local symbols on Mac OS X]) 951 - _LT_DECL([], [LIPO], [1], 952 - [Tool to manipulate fat objects and archives on Mac OS X]) 953 - _LT_DECL([], [OTOOL], [1], 954 - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) 955 - _LT_DECL([], [OTOOL64], [1], 956 - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) 957 - 958 - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], 959 - [lt_cv_apple_cc_single_mod=no 960 - if test -z "${LT_MULTI_MODULE}"; then 961 - # By default we will add the -single_module flag. You can override 962 - # by either setting the environment variable LT_MULTI_MODULE 963 - # non-empty at configure time, or by adding -multi_module to the 964 - # link flags. 965 - rm -rf libconftest.dylib* 966 - echo "int foo(void){return 1;}" > conftest.c 967 - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ 968 --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD 969 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ 970 - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err 971 - _lt_result=$? 972 - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then 973 - lt_cv_apple_cc_single_mod=yes 974 - else 975 - cat conftest.err >&AS_MESSAGE_LOG_FD 976 - fi 977 - rm -rf libconftest.dylib* 978 - rm -f conftest.* 979 - fi]) 980 - AC_CACHE_CHECK([for -exported_symbols_list linker flag], 981 - [lt_cv_ld_exported_symbols_list], 982 - [lt_cv_ld_exported_symbols_list=no 983 - save_LDFLAGS=$LDFLAGS 984 - echo "_main" > conftest.sym 985 - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" 986 - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], 987 - [lt_cv_ld_exported_symbols_list=yes], 988 - [lt_cv_ld_exported_symbols_list=no]) 989 - LDFLAGS="$save_LDFLAGS" 990 - ]) 991 - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], 992 - [lt_cv_ld_force_load=no 993 - cat > conftest.c << _LT_EOF 994 -int forced_loaded() { return 2;} 995 -_LT_EOF 996 - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD 997 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD 998 - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD 999 - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD 1000 - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD 1001 - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD 1002 - cat > conftest.c << _LT_EOF 1003 -int main() { return 0;} 1004 -_LT_EOF 1005 - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD 1006 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err 1007 - _lt_result=$? 1008 - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then 1009 - lt_cv_ld_force_load=yes 1010 - else 1011 - cat conftest.err >&AS_MESSAGE_LOG_FD 1012 - fi 1013 - rm -f conftest.err libconftest.a conftest conftest.c 1014 - rm -rf conftest.dSYM 1015 - ]) 1016 - case $host_os in 1017 - rhapsody* | darwin1.[[012]]) 1018 - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; 1019 - darwin1.*) 1020 - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 1021 - darwin*) # darwin 5.x on 1022 - # if running on 10.5 or later, the deployment target defaults 1023 - # to the OS version, if on x86, and 10.4, the deployment 1024 - # target defaults to 10.4. Don't you love it? 1025 - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 1026 - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) 1027 - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 1028 - 10.[[012]]*) 1029 - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 1030 - 10.*) 1031 - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 1032 - esac 1033 - ;; 1034 - esac 1035 - if test "$lt_cv_apple_cc_single_mod" = "yes"; then 1036 - _lt_dar_single_mod='$single_module' 1037 - fi 1038 - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then 1039 - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' 1040 - else 1041 - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' 1042 - fi 1043 - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then 1044 - _lt_dsymutil='~$DSYMUTIL $lib || :' 1045 - else 1046 - _lt_dsymutil= 1047 - fi 1048 - ;; 1049 - esac 1050 -]) 1051 - 1052 - 1053 -# _LT_DARWIN_LINKER_FEATURES 1054 -# -------------------------- 1055 -# Checks for linker and compiler features on darwin 1056 -m4_defun([_LT_DARWIN_LINKER_FEATURES], 1057 -[ 1058 - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) 1059 - _LT_TAGVAR(archive_cmds_need_lc, $1)=no 1060 - _LT_TAGVAR(hardcode_direct, $1)=no 1061 - _LT_TAGVAR(hardcode_automatic, $1)=yes 1062 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported 1063 - if test "$lt_cv_ld_force_load" = "yes"; then 1064 - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' 1065 - else 1066 - _LT_TAGVAR(whole_archive_flag_spec, $1)='' 1067 - fi 1068 - _LT_TAGVAR(link_all_deplibs, $1)=yes 1069 - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" 1070 - case $cc_basename in 1071 - ifort*) _lt_dar_can_shared=yes ;; 1072 - *) _lt_dar_can_shared=$GCC ;; 1073 - esac 1074 - if test "$_lt_dar_can_shared" = "yes"; then 1075 - output_verbose_link_cmd=func_echo_all 1076 - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" 1077 - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" 1078 - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" 1079 - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" 1080 - m4_if([$1], [CXX], 1081 -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then 1082 - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" 1083 - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" 1084 - fi 1085 -],[]) 1086 - else 1087 - _LT_TAGVAR(ld_shlibs, $1)=no 1088 - fi 1089 -]) 1090 - 1091 -# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) 1092 -# ---------------------------------- 1093 -# Links a minimal program and checks the executable 1094 -# for the system default hardcoded library path. In most cases, 1095 -# this is /usr/lib:/lib, but when the MPI compilers are used 1096 -# the location of the communication and MPI libs are included too. 1097 -# If we don't find anything, use the default library path according 1098 -# to the aix ld manual. 1099 -# Store the results from the different compilers for each TAGNAME. 1100 -# Allow to override them for all tags through lt_cv_aix_libpath. 1101 -m4_defun([_LT_SYS_MODULE_PATH_AIX], 1102 -[m4_require([_LT_DECL_SED])dnl 1103 -if test "${lt_cv_aix_libpath+set}" = set; then 1104 - aix_libpath=$lt_cv_aix_libpath 1105 -else 1106 - AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], 1107 - [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ 1108 - lt_aix_libpath_sed='[ 1109 - /Import File Strings/,/^$/ { 1110 - /^0/ { 1111 - s/^0 *\([^ ]*\) *$/\1/ 1112 - p 1113 - } 1114 - }]' 1115 - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` 1116 - # Check for a 64-bit object if we didn't find anything. 1117 - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then 1118 - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` 1119 - fi],[]) 1120 - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then 1121 - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" 1122 - fi 1123 - ]) 1124 - aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) 1125 -fi 1126 -])# _LT_SYS_MODULE_PATH_AIX 1127 - 1128 - 1129 -# _LT_SHELL_INIT(ARG) 1130 -# ------------------- 1131 -m4_define([_LT_SHELL_INIT], 1132 -[m4_divert_text([M4SH-INIT], [$1 1133 -])])# _LT_SHELL_INIT 1134 - 1135 - 1136 - 1137 -# _LT_PROG_ECHO_BACKSLASH 1138 -# ----------------------- 1139 -# Find how we can fake an echo command that does not interpret backslash. 1140 -# In particular, with Autoconf 2.60 or later we add some code to the start 1141 -# of the generated configure script which will find a shell with a builtin 1142 -# printf (which we can use as an echo command). 1143 -m4_defun([_LT_PROG_ECHO_BACKSLASH], 1144 -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' 1145 -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO 1146 -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO 1147 - 1148 -AC_MSG_CHECKING([how to print strings]) 1149 -# Test print first, because it will be a builtin if present. 1150 -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ 1151 - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then 1152 - ECHO='print -r --' 1153 -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then 1154 - ECHO='printf %s\n' 1155 -else 1156 - # Use this function as a fallback that always works. 1157 - func_fallback_echo () 1158 - { 1159 - eval 'cat <<_LTECHO_EOF 1160 -$[]1 1161 -_LTECHO_EOF' 1162 - } 1163 - ECHO='func_fallback_echo' 1164 -fi 1165 - 1166 -# func_echo_all arg... 1167 -# Invoke $ECHO with all args, space-separated. 1168 -func_echo_all () 1169 -{ 1170 - $ECHO "$*" 1171 -} 1172 - 1173 -case "$ECHO" in 1174 - printf*) AC_MSG_RESULT([printf]) ;; 1175 - print*) AC_MSG_RESULT([print -r]) ;; 1176 - *) AC_MSG_RESULT([cat]) ;; 1177 -esac 1178 - 1179 -m4_ifdef([_AS_DETECT_SUGGESTED], 1180 -[_AS_DETECT_SUGGESTED([ 1181 - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( 1182 - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' 1183 - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO 1184 - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO 1185 - PATH=/empty FPATH=/empty; export PATH FPATH 1186 - test "X`printf %s $ECHO`" = "X$ECHO" \ 1187 - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) 1188 - 1189 -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) 1190 -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) 1191 -])# _LT_PROG_ECHO_BACKSLASH 1192 - 1193 - 1194 -# _LT_WITH_SYSROOT 1195 -# ---------------- 1196 -AC_DEFUN([_LT_WITH_SYSROOT], 1197 -[AC_MSG_CHECKING([for sysroot]) 1198 -AC_ARG_WITH([sysroot], 1199 -[ --with-sysroot[=DIR] Search for dependent libraries within DIR 1200 - (or the compiler's sysroot if not specified).], 1201 -[], [with_sysroot=no]) 1202 - 1203 -dnl lt_sysroot will always be passed unquoted. We quote it here 1204 -dnl in case the user passed a directory name. 1205 -lt_sysroot= 1206 -case ${with_sysroot} in #( 1207 - yes) 1208 - if test "$GCC" = yes; then 1209 - lt_sysroot=`$CC --print-sysroot 2>/dev/null` 1210 - fi 1211 - ;; #( 1212 - /*) 1213 - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` 1214 - ;; #( 1215 - no|'') 1216 - ;; #( 1217 - *) 1218 - AC_MSG_RESULT([${with_sysroot}]) 1219 - AC_MSG_ERROR([The sysroot must be an absolute path.]) 1220 - ;; 1221 -esac 1222 - 1223 - AC_MSG_RESULT([${lt_sysroot:-no}]) 1224 -_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl 1225 -[dependent libraries, and in which our libraries should be installed.])]) 1226 - 1227 -# _LT_ENABLE_LOCK 1228 -# --------------- 1229 -m4_defun([_LT_ENABLE_LOCK], 1230 -[AC_ARG_ENABLE([libtool-lock], 1231 - [AS_HELP_STRING([--disable-libtool-lock], 1232 - [avoid locking (might break parallel builds)])]) 1233 -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes 1234 - 1235 -# Some flags need to be propagated to the compiler or linker for good 1236 -# libtool support. 1237 -case $host in 1238 -ia64-*-hpux*) 1239 - # Find out which ABI we are using. 1240 - echo 'int i;' > conftest.$ac_ext 1241 - if AC_TRY_EVAL(ac_compile); then 1242 - case `/usr/bin/file conftest.$ac_objext` in 1243 - *ELF-32*) 1244 - HPUX_IA64_MODE="32" 1245 - ;; 1246 - *ELF-64*) 1247 - HPUX_IA64_MODE="64" 1248 - ;; 1249 - esac 1250 - fi 1251 - rm -rf conftest* 1252 - ;; 1253 -*-*-irix6*) 1254 - # Find out which ABI we are using. 1255 - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext 1256 - if AC_TRY_EVAL(ac_compile); then 1257 - if test "$lt_cv_prog_gnu_ld" = yes; then 1258 - case `/usr/bin/file conftest.$ac_objext` in 1259 - *32-bit*) 1260 - LD="${LD-ld} -melf32bsmip" 1261 - ;; 1262 - *N32*) 1263 - LD="${LD-ld} -melf32bmipn32" 1264 - ;; 1265 - *64-bit*) 1266 - LD="${LD-ld} -melf64bmip" 1267 - ;; 1268 - esac 1269 - else 1270 - case `/usr/bin/file conftest.$ac_objext` in 1271 - *32-bit*) 1272 - LD="${LD-ld} -32" 1273 - ;; 1274 - *N32*) 1275 - LD="${LD-ld} -n32" 1276 - ;; 1277 - *64-bit*) 1278 - LD="${LD-ld} -64" 1279 - ;; 1280 - esac 1281 - fi 1282 - fi 1283 - rm -rf conftest* 1284 - ;; 1285 - 1286 -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ 1287 -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) 1288 - # Find out which ABI we are using. 1289 - echo 'int i;' > conftest.$ac_ext 1290 - if AC_TRY_EVAL(ac_compile); then 1291 - case `/usr/bin/file conftest.o` in 1292 - *32-bit*) 1293 - case $host in 1294 - x86_64-*kfreebsd*-gnu) 1295 - LD="${LD-ld} -m elf_i386_fbsd" 1296 - ;; 1297 - x86_64-*linux*) 1298 - LD="${LD-ld} -m elf_i386" 1299 - ;; 1300 - ppc64-*linux*|powerpc64-*linux*) 1301 - LD="${LD-ld} -m elf32ppclinux" 1302 - ;; 1303 - s390x-*linux*) 1304 - LD="${LD-ld} -m elf_s390" 1305 - ;; 1306 - sparc64-*linux*) 1307 - LD="${LD-ld} -m elf32_sparc" 1308 - ;; 1309 - esac 1310 - ;; 1311 - *64-bit*) 1312 - case $host in 1313 - x86_64-*kfreebsd*-gnu) 1314 - LD="${LD-ld} -m elf_x86_64_fbsd" 1315 - ;; 1316 - x86_64-*linux*) 1317 - LD="${LD-ld} -m elf_x86_64" 1318 - ;; 1319 - ppc*-*linux*|powerpc*-*linux*) 1320 - LD="${LD-ld} -m elf64ppc" 1321 - ;; 1322 - s390*-*linux*|s390*-*tpf*) 1323 - LD="${LD-ld} -m elf64_s390" 1324 - ;; 1325 - sparc*-*linux*) 1326 - LD="${LD-ld} -m elf64_sparc" 1327 - ;; 1328 - esac 1329 - ;; 1330 - esac 1331 - fi 1332 - rm -rf conftest* 1333 - ;; 1334 - 1335 -*-*-sco3.2v5*) 1336 - # On SCO OpenServer 5, we need -belf to get full-featured binaries. 1337 - SAVE_CFLAGS="$CFLAGS" 1338 - CFLAGS="$CFLAGS -belf" 1339 - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, 1340 - [AC_LANG_PUSH(C) 1341 - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) 1342 - AC_LANG_POP]) 1343 - if test x"$lt_cv_cc_needs_belf" != x"yes"; then 1344 - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf 1345 - CFLAGS="$SAVE_CFLAGS" 1346 - fi 1347 - ;; 1348 -sparc*-*solaris*) 1349 - # Find out which ABI we are using. 1350 - echo 'int i;' > conftest.$ac_ext 1351 - if AC_TRY_EVAL(ac_compile); then 1352 - case `/usr/bin/file conftest.o` in 1353 - *64-bit*) 1354 - case $lt_cv_prog_gnu_ld in 1355 - yes*) LD="${LD-ld} -m elf64_sparc" ;; 1356 - *) 1357 - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then 1358 - LD="${LD-ld} -64" 1359 - fi 1360 - ;; 1361 - esac 1362 - ;; 1363 - esac 1364 - fi 1365 - rm -rf conftest* 1366 - ;; 1367 -esac 1368 - 1369 -need_locks="$enable_libtool_lock" 1370 -])# _LT_ENABLE_LOCK 1371 - 1372 - 1373 -# _LT_PROG_AR 1374 -# ----------- 1375 -m4_defun([_LT_PROG_AR], 1376 -[AC_CHECK_TOOLS(AR, [ar], false) 1377 -: ${AR=ar} 1378 -: ${AR_FLAGS=cru} 1379 -_LT_DECL([], [AR], [1], [The archiver]) 1380 -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) 1381 - 1382 -AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], 1383 - [lt_cv_ar_at_file=no 1384 - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], 1385 - [echo conftest.$ac_objext > conftest.lst 1386 - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' 1387 - AC_TRY_EVAL([lt_ar_try]) 1388 - if test "$ac_status" -eq 0; then 1389 - # Ensure the archiver fails upon bogus file names. 1390 - rm -f conftest.$ac_objext libconftest.a 1391 - AC_TRY_EVAL([lt_ar_try]) 1392 - if test "$ac_status" -ne 0; then 1393 - lt_cv_ar_at_file=@ 1394 - fi 1395 - fi 1396 - rm -f conftest.* libconftest.a 1397 - ]) 1398 - ]) 1399 - 1400 -if test "x$lt_cv_ar_at_file" = xno; then 1401 - archiver_list_spec= 1402 -else 1403 - archiver_list_spec=$lt_cv_ar_at_file 1404 -fi 1405 -_LT_DECL([], [archiver_list_spec], [1], 1406 - [How to feed a file listing to the archiver]) 1407 -])# _LT_PROG_AR 1408 - 1409 - 1410 -# _LT_CMD_OLD_ARCHIVE 1411 -# ------------------- 1412 -m4_defun([_LT_CMD_OLD_ARCHIVE], 1413 -[_LT_PROG_AR 1414 - 1415 -AC_CHECK_TOOL(STRIP, strip, :) 1416 -test -z "$STRIP" && STRIP=: 1417 -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) 1418 - 1419 -AC_CHECK_TOOL(RANLIB, ranlib, :) 1420 -test -z "$RANLIB" && RANLIB=: 1421 -_LT_DECL([], [RANLIB], [1], 1422 - [Commands used to install an old-style archive]) 1423 - 1424 -# Determine commands to create old-style static archives. 1425 -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' 1426 -old_postinstall_cmds='chmod 644 $oldlib' 1427 -old_postuninstall_cmds= 1428 - 1429 -if test -n "$RANLIB"; then 1430 - case $host_os in 1431 - openbsd*) 1432 - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" 1433 - ;; 1434 - *) 1435 - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" 1436 - ;; 1437 - esac 1438 - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" 1439 -fi 1440 - 1441 -case $host_os in 1442 - darwin*) 1443 - lock_old_archive_extraction=yes ;; 1444 - *) 1445 - lock_old_archive_extraction=no ;; 1446 -esac 1447 -_LT_DECL([], [old_postinstall_cmds], [2]) 1448 -_LT_DECL([], [old_postuninstall_cmds], [2]) 1449 -_LT_TAGDECL([], [old_archive_cmds], [2], 1450 - [Commands used to build an old-style archive]) 1451 -_LT_DECL([], [lock_old_archive_extraction], [0], 1452 - [Whether to use a lock for old archive extraction]) 1453 -])# _LT_CMD_OLD_ARCHIVE 1454 - 1455 - 1456 -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, 1457 -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) 1458 -# ---------------------------------------------------------------- 1459 -# Check whether the given compiler option works 1460 -AC_DEFUN([_LT_COMPILER_OPTION], 1461 -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl 1462 -m4_require([_LT_DECL_SED])dnl 1463 -AC_CACHE_CHECK([$1], [$2], 1464 - [$2=no 1465 - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) 1466 - echo "$lt_simple_compile_test_code" > conftest.$ac_ext 1467 - lt_compiler_flag="$3" 1468 - # Insert the option either (1) after the last *FLAGS variable, or 1469 - # (2) before a word containing "conftest.", or (3) at the end. 1470 - # Note that $ac_compile itself does not contain backslashes and begins 1471 - # with a dollar sign (not a hyphen), so the echo should work correctly. 1472 - # The option is referenced via a variable to avoid confusing sed. 1473 - lt_compile=`echo "$ac_compile" | $SED \ 1474 - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ 1475 - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ 1476 - -e 's:$: $lt_compiler_flag:'` 1477 - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) 1478 - (eval "$lt_compile" 2>conftest.err) 1479 - ac_status=$? 1480 - cat conftest.err >&AS_MESSAGE_LOG_FD 1481 - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD 1482 - if (exit $ac_status) && test -s "$ac_outfile"; then 1483 - # The compiler can only warn and ignore the option if not recognized 1484 - # So say no if there are warnings other than the usual output. 1485 - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp 1486 - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 1487 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then 1488 - $2=yes 1489 - fi 1490 - fi 1491 - $RM conftest* 1492 -]) 1493 - 1494 -if test x"[$]$2" = xyes; then 1495 - m4_if([$5], , :, [$5]) 1496 -else 1497 - m4_if([$6], , :, [$6]) 1498 -fi 1499 -])# _LT_COMPILER_OPTION 1500 - 1501 -# Old name: 1502 -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) 1503 -dnl aclocal-1.4 backwards compatibility: 1504 -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) 1505 - 1506 - 1507 -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, 1508 -# [ACTION-SUCCESS], [ACTION-FAILURE]) 1509 -# ---------------------------------------------------- 1510 -# Check whether the given linker option works 1511 -AC_DEFUN([_LT_LINKER_OPTION], 1512 -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl 1513 -m4_require([_LT_DECL_SED])dnl 1514 -AC_CACHE_CHECK([$1], [$2], 1515 - [$2=no 1516 - save_LDFLAGS="$LDFLAGS" 1517 - LDFLAGS="$LDFLAGS $3" 1518 - echo "$lt_simple_link_test_code" > conftest.$ac_ext 1519 - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then 1520 - # The linker can only warn and ignore the option if not recognized 1521 - # So say no if there are warnings 1522 - if test -s conftest.err; then 1523 - # Append any errors to the config.log. 1524 - cat conftest.err 1>&AS_MESSAGE_LOG_FD 1525 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp 1526 - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 1527 - if diff conftest.exp conftest.er2 >/dev/null; then 1528 - $2=yes 1529 - fi 1530 - else 1531 - $2=yes 1532 - fi 1533 - fi 1534 - $RM -r conftest* 1535 - LDFLAGS="$save_LDFLAGS" 1536 -]) 1537 - 1538 -if test x"[$]$2" = xyes; then 1539 - m4_if([$4], , :, [$4]) 1540 -else 1541 - m4_if([$5], , :, [$5]) 1542 -fi 1543 -])# _LT_LINKER_OPTION 1544 - 1545 -# Old name: 1546 -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) 1547 -dnl aclocal-1.4 backwards compatibility: 1548 -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) 1549 - 1550 - 1551 -# LT_CMD_MAX_LEN 1552 -#--------------- 1553 -AC_DEFUN([LT_CMD_MAX_LEN], 1554 -[AC_REQUIRE([AC_CANONICAL_HOST])dnl 1555 -# find the maximum length of command line arguments 1556 -AC_MSG_CHECKING([the maximum length of command line arguments]) 1557 -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl 1558 - i=0 1559 - teststring="ABCD" 1560 - 1561 - case $build_os in 1562 - msdosdjgpp*) 1563 - # On DJGPP, this test can blow up pretty badly due to problems in libc 1564 - # (any single argument exceeding 2000 bytes causes a buffer overrun 1565 - # during glob expansion). Even if it were fixed, the result of this 1566 - # check would be larger than it should be. 1567 - lt_cv_sys_max_cmd_len=12288; # 12K is about right 1568 - ;; 1569 - 1570 - gnu*) 1571 - # Under GNU Hurd, this test is not required because there is 1572 - # no limit to the length of command line arguments. 1573 - # Libtool will interpret -1 as no limit whatsoever 1574 - lt_cv_sys_max_cmd_len=-1; 1575 - ;; 1576 - 1577 - cygwin* | mingw* | cegcc*) 1578 - # On Win9x/ME, this test blows up -- it succeeds, but takes 1579 - # about 5 minutes as the teststring grows exponentially. 1580 - # Worse, since 9x/ME are not pre-emptively multitasking, 1581 - # you end up with a "frozen" computer, even though with patience 1582 - # the test eventually succeeds (with a max line length of 256k). 1583 - # Instead, let's just punt: use the minimum linelength reported by 1584 - # all of the supported platforms: 8192 (on NT/2K/XP). 1585 - lt_cv_sys_max_cmd_len=8192; 1586 - ;; 1587 - 1588 - mint*) 1589 - # On MiNT this can take a long time and run out of memory. 1590 - lt_cv_sys_max_cmd_len=8192; 1591 - ;; 1592 - 1593 - amigaos*) 1594 - # On AmigaOS with pdksh, this test takes hours, literally. 1595 - # So we just punt and use a minimum line length of 8192. 1596 - lt_cv_sys_max_cmd_len=8192; 1597 - ;; 1598 - 1599 - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) 1600 - # This has been around since 386BSD, at least. Likely further. 1601 - if test -x /sbin/sysctl; then 1602 - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` 1603 - elif test -x /usr/sbin/sysctl; then 1604 - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` 1605 - else 1606 - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs 1607 - fi 1608 - # And add a safety zone 1609 - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` 1610 - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` 1611 - ;; 1612 - 1613 - interix*) 1614 - # We know the value 262144 and hardcode it with a safety zone (like BSD) 1615 - lt_cv_sys_max_cmd_len=196608 1616 - ;; 1617 - 1618 - osf*) 1619 - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure 1620 - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not 1621 - # nice to cause kernel panics so lets avoid the loop below. 1622 - # First set a reasonable default. 1623 - lt_cv_sys_max_cmd_len=16384 1624 - # 1625 - if test -x /sbin/sysconfig; then 1626 - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in 1627 - *1*) lt_cv_sys_max_cmd_len=-1 ;; 1628 - esac 1629 - fi 1630 - ;; 1631 - sco3.2v5*) 1632 - lt_cv_sys_max_cmd_len=102400 1633 - ;; 1634 - sysv5* | sco5v6* | sysv4.2uw2*) 1635 - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` 1636 - if test -n "$kargmax"; then 1637 - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` 1638 - else 1639 - lt_cv_sys_max_cmd_len=32768 1640 - fi 1641 - ;; 1642 - *) 1643 - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` 1644 - if test -n "$lt_cv_sys_max_cmd_len"; then 1645 - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` 1646 - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` 1647 - else 1648 - # Make teststring a little bigger before we do anything with it. 1649 - # a 1K string should be a reasonable start. 1650 - for i in 1 2 3 4 5 6 7 8 ; do 1651 - teststring=$teststring$teststring 1652 - done 1653 - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} 1654 - # If test is not a shell built-in, we'll probably end up computing a 1655 - # maximum length that is only half of the actual maximum length, but 1656 - # we can't tell. 1657 - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ 1658 - = "X$teststring$teststring"; } >/dev/null 2>&1 && 1659 - test $i != 17 # 1/2 MB should be enough 1660 - do 1661 - i=`expr $i + 1` 1662 - teststring=$teststring$teststring 1663 - done 1664 - # Only check the string length outside the loop. 1665 - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` 1666 - teststring= 1667 - # Add a significant safety factor because C++ compilers can tack on 1668 - # massive amounts of additional arguments before passing them to the 1669 - # linker. It appears as though 1/2 is a usable value. 1670 - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` 1671 - fi 1672 - ;; 1673 - esac 1674 -]) 1675 -if test -n $lt_cv_sys_max_cmd_len ; then 1676 - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) 1677 -else 1678 - AC_MSG_RESULT(none) 1679 -fi 1680 -max_cmd_len=$lt_cv_sys_max_cmd_len 1681 -_LT_DECL([], [max_cmd_len], [0], 1682 - [What is the maximum length of a command?]) 1683 -])# LT_CMD_MAX_LEN 1684 - 1685 -# Old name: 1686 -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) 1687 -dnl aclocal-1.4 backwards compatibility: 1688 -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) 1689 - 1690 - 1691 -# _LT_HEADER_DLFCN 1692 -# ---------------- 1693 -m4_defun([_LT_HEADER_DLFCN], 1694 -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl 1695 -])# _LT_HEADER_DLFCN 1696 - 1697 - 1698 -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, 1699 -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) 1700 -# ---------------------------------------------------------------- 1701 -m4_defun([_LT_TRY_DLOPEN_SELF], 1702 -[m4_require([_LT_HEADER_DLFCN])dnl 1703 -if test "$cross_compiling" = yes; then : 1704 - [$4] 1705 -else 1706 - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 1707 - lt_status=$lt_dlunknown 1708 - cat > conftest.$ac_ext <<_LT_EOF 1709 -[#line $LINENO "configure" 1710 -#include "confdefs.h" 1711 - 1712 -#if HAVE_DLFCN_H 1713 -#include <dlfcn.h> 1714 -#endif 1715 - 1716 -#include <stdio.h> 1717 - 1718 -#ifdef RTLD_GLOBAL 1719 -# define LT_DLGLOBAL RTLD_GLOBAL 1720 -#else 1721 -# ifdef DL_GLOBAL 1722 -# define LT_DLGLOBAL DL_GLOBAL 1723 -# else 1724 -# define LT_DLGLOBAL 0 1725 -# endif 1726 -#endif 1727 - 1728 -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we 1729 - find out it does not work in some platform. */ 1730 -#ifndef LT_DLLAZY_OR_NOW 1731 -# ifdef RTLD_LAZY 1732 -# define LT_DLLAZY_OR_NOW RTLD_LAZY 1733 -# else 1734 -# ifdef DL_LAZY 1735 -# define LT_DLLAZY_OR_NOW DL_LAZY 1736 -# else 1737 -# ifdef RTLD_NOW 1738 -# define LT_DLLAZY_OR_NOW RTLD_NOW 1739 -# else 1740 -# ifdef DL_NOW 1741 -# define LT_DLLAZY_OR_NOW DL_NOW 1742 -# else 1743 -# define LT_DLLAZY_OR_NOW 0 1744 -# endif 1745 -# endif 1746 -# endif 1747 -# endif 1748 -#endif 1749 - 1750 -/* When -fvisbility=hidden is used, assume the code has been annotated 1751 - correspondingly for the symbols needed. */ 1752 -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) 1753 -int fnord () __attribute__((visibility("default"))); 1754 -#endif 1755 - 1756 -int fnord () { return 42; } 1757 -int main () 1758 -{ 1759 - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); 1760 - int status = $lt_dlunknown; 1761 - 1762 - if (self) 1763 - { 1764 - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; 1765 - else 1766 - { 1767 - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; 1768 - else puts (dlerror ()); 1769 - } 1770 - /* dlclose (self); */ 1771 - } 1772 - else 1773 - puts (dlerror ()); 1774 - 1775 - return status; 1776 -}] 1777 -_LT_EOF 1778 - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then 1779 - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null 1780 - lt_status=$? 1781 - case x$lt_status in 1782 - x$lt_dlno_uscore) $1 ;; 1783 - x$lt_dlneed_uscore) $2 ;; 1784 - x$lt_dlunknown|x*) $3 ;; 1785 - esac 1786 - else : 1787 - # compilation failed 1788 - $3 1789 - fi 1790 -fi 1791 -rm -fr conftest* 1792 -])# _LT_TRY_DLOPEN_SELF 1793 - 1794 - 1795 -# LT_SYS_DLOPEN_SELF 1796 -# ------------------ 1797 -AC_DEFUN([LT_SYS_DLOPEN_SELF], 1798 -[m4_require([_LT_HEADER_DLFCN])dnl 1799 -if test "x$enable_dlopen" != xyes; then 1800 - enable_dlopen=unknown 1801 - enable_dlopen_self=unknown 1802 - enable_dlopen_self_static=unknown 1803 -else 1804 - lt_cv_dlopen=no 1805 - lt_cv_dlopen_libs= 1806 - 1807 - case $host_os in 1808 - beos*) 1809 - lt_cv_dlopen="load_add_on" 1810 - lt_cv_dlopen_libs= 1811 - lt_cv_dlopen_self=yes 1812 - ;; 1813 - 1814 - mingw* | pw32* | cegcc*) 1815 - lt_cv_dlopen="LoadLibrary" 1816 - lt_cv_dlopen_libs= 1817 - ;; 1818 - 1819 - cygwin*) 1820 - lt_cv_dlopen="dlopen" 1821 - lt_cv_dlopen_libs= 1822 - ;; 1823 - 1824 - darwin*) 1825 - # if libdl is installed we need to link against it 1826 - AC_CHECK_LIB([dl], [dlopen], 1827 - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ 1828 - lt_cv_dlopen="dyld" 1829 - lt_cv_dlopen_libs= 1830 - lt_cv_dlopen_self=yes 1831 - ]) 1832 - ;; 1833 - 1834 - *) 1835 - AC_CHECK_FUNC([shl_load], 1836 - [lt_cv_dlopen="shl_load"], 1837 - [AC_CHECK_LIB([dld], [shl_load], 1838 - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], 1839 - [AC_CHECK_FUNC([dlopen], 1840 - [lt_cv_dlopen="dlopen"], 1841 - [AC_CHECK_LIB([dl], [dlopen], 1842 - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], 1843 - [AC_CHECK_LIB([svld], [dlopen], 1844 - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], 1845 - [AC_CHECK_LIB([dld], [dld_link], 1846 - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) 1847 - ]) 1848 - ]) 1849 - ]) 1850 - ]) 1851 - ]) 1852 - ;; 1853 - esac 1854 - 1855 - if test "x$lt_cv_dlopen" != xno; then 1856 - enable_dlopen=yes 1857 - else 1858 - enable_dlopen=no 1859 - fi 1860 - 1861 - case $lt_cv_dlopen in 1862 - dlopen) 1863 - save_CPPFLAGS="$CPPFLAGS" 1864 - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" 1865 - 1866 - save_LDFLAGS="$LDFLAGS" 1867 - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" 1868 - 1869 - save_LIBS="$LIBS" 1870 - LIBS="$lt_cv_dlopen_libs $LIBS" 1871 - 1872 - AC_CACHE_CHECK([whether a program can dlopen itself], 1873 - lt_cv_dlopen_self, [dnl 1874 - _LT_TRY_DLOPEN_SELF( 1875 - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, 1876 - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) 1877 - ]) 1878 - 1879 - if test "x$lt_cv_dlopen_self" = xyes; then 1880 - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" 1881 - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], 1882 - lt_cv_dlopen_self_static, [dnl 1883 - _LT_TRY_DLOPEN_SELF( 1884 - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, 1885 - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) 1886 - ]) 1887 - fi 1888 - 1889 - CPPFLAGS="$save_CPPFLAGS" 1890 - LDFLAGS="$save_LDFLAGS" 1891 - LIBS="$save_LIBS" 1892 - ;; 1893 - esac 1894 - 1895 - case $lt_cv_dlopen_self in 1896 - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; 1897 - *) enable_dlopen_self=unknown ;; 1898 - esac 1899 - 1900 - case $lt_cv_dlopen_self_static in 1901 - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; 1902 - *) enable_dlopen_self_static=unknown ;; 1903 - esac 1904 -fi 1905 -_LT_DECL([dlopen_support], [enable_dlopen], [0], 1906 - [Whether dlopen is supported]) 1907 -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], 1908 - [Whether dlopen of programs is supported]) 1909 -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], 1910 - [Whether dlopen of statically linked programs is supported]) 1911 -])# LT_SYS_DLOPEN_SELF 1912 - 1913 -# Old name: 1914 -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) 1915 -dnl aclocal-1.4 backwards compatibility: 1916 -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) 1917 - 1918 - 1919 -# _LT_COMPILER_C_O([TAGNAME]) 1920 -# --------------------------- 1921 -# Check to see if options -c and -o are simultaneously supported by compiler. 1922 -# This macro does not hard code the compiler like AC_PROG_CC_C_O. 1923 -m4_defun([_LT_COMPILER_C_O], 1924 -[m4_require([_LT_DECL_SED])dnl 1925 -m4_require([_LT_FILEUTILS_DEFAULTS])dnl 1926 -m4_require([_LT_TAG_COMPILER])dnl 1927 -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], 1928 - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], 1929 - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no 1930 - $RM -r conftest 2>/dev/null 1931 - mkdir conftest 1932 - cd conftest 1933 - mkdir out 1934 - echo "$lt_simple_compile_test_code" > conftest.$ac_ext 1935 - 1936 - lt_compiler_flag="-o out/conftest2.$ac_objext" 1937 - # Insert the option either (1) after the last *FLAGS variable, or 1938 - # (2) before a word containing "conftest.", or (3) at the end. 1939 - # Note that $ac_compile itself does not contain backslashes and begins 1940 - # with a dollar sign (not a hyphen), so the echo should work correctly. 1941 - lt_compile=`echo "$ac_compile" | $SED \ 1942 - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ 1943 - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ 1944 - -e 's:$: $lt_compiler_flag:'` 1945 - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) 1946 - (eval "$lt_compile" 2>out/conftest.err) 1947 - ac_status=$? 1948 - cat out/conftest.err >&AS_MESSAGE_LOG_FD 1949 - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD 1950 - if (exit $ac_status) && test -s out/conftest2.$ac_objext 1951 - then 1952 - # The compiler can only warn and ignore the option if not recognized 1953 - # So say no if there are warnings 1954 - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp 1955 - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 1956 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then 1957 - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes 1958 - fi 1959 - fi 1960 - chmod u+w . 2>&AS_MESSAGE_LOG_FD 1961 - $RM conftest* 1962 - # SGI C++ compiler will create directory out/ii_files/ for 1963 - # template instantiation 1964 - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files 1965 - $RM out/* && rmdir out 1966 - cd .. 1967 - $RM -r conftest 1968 - $RM conftest* 1969 -]) 1970 -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], 1971 - [Does compiler simultaneously support -c and -o options?]) 1972 -])# _LT_COMPILER_C_O 1973 - 1974 - 1975 -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) 1976 -# ---------------------------------- 1977 -# Check to see if we can do hard links to lock some files if needed 1978 -m4_defun([_LT_COMPILER_FILE_LOCKS], 1979 -[m4_require([_LT_ENABLE_LOCK])dnl 1980 -m4_require([_LT_FILEUTILS_DEFAULTS])dnl 1981 -_LT_COMPILER_C_O([$1]) 1982 - 1983 -hard_links="nottested" 1984 -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then 1985 - # do not overwrite the value of need_locks provided by the user 1986 - AC_MSG_CHECKING([if we can lock with hard links]) 1987 - hard_links=yes 1988 - $RM conftest* 1989 - ln conftest.a conftest.b 2>/dev/null && hard_links=no 1990 - touch conftest.a 1991 - ln conftest.a conftest.b 2>&5 || hard_links=no 1992 - ln conftest.a conftest.b 2>/dev/null && hard_links=no 1993 - AC_MSG_RESULT([$hard_links]) 1994 - if test "$hard_links" = no; then 1995 - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) 1996 - need_locks=warn 1997 - fi 1998 -else 1999 - need_locks=no 2000 -fi 2001 -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) 2002 -])# _LT_COMPILER_FILE_LOCKS 2003 - 2004 - 2005 -# _LT_CHECK_OBJDIR 2006 -# ---------------- 2007 -m4_defun([_LT_CHECK_OBJDIR], 2008 -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], 2009 -[rm -f .libs 2>/dev/null 2010 -mkdir .libs 2>/dev/null 2011 -if test -d .libs; then 2012 - lt_cv_objdir=.libs 2013 -else 2014 - # MS-DOS does not allow filenames that begin with a dot. 2015 - lt_cv_objdir=_libs 2016 -fi 2017 -rmdir .libs 2>/dev/null]) 2018 -objdir=$lt_cv_objdir 2019 -_LT_DECL([], [objdir], [0], 2020 - [The name of the directory that contains temporary libtool files])dnl 2021 -m4_pattern_allow([LT_OBJDIR])dnl 2022 -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", 2023 - [Define to the sub-directory in which libtool stores uninstalled libraries.]) 2024 -])# _LT_CHECK_OBJDIR 2025 - 2026 - 2027 -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) 2028 -# -------------------------------------- 2029 -# Check hardcoding attributes. 2030 -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], 2031 -[AC_MSG_CHECKING([how to hardcode library paths into programs]) 2032 -_LT_TAGVAR(hardcode_action, $1)= 2033 -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || 2034 - test -n "$_LT_TAGVAR(runpath_var, $1)" || 2035 - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then 2036 - 2037 - # We can hardcode non-existent directories. 2038 - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && 2039 - # If the only mechanism to avoid hardcoding is shlibpath_var, we 2040 - # have to relink, otherwise we might link with an installed library 2041 - # when we should be linking with a yet-to-be-installed one 2042 - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && 2043 - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then 2044 - # Linking always hardcodes the temporary library directory. 2045 - _LT_TAGVAR(hardcode_action, $1)=relink 2046 - else 2047 - # We can link without hardcoding, and we can hardcode nonexisting dirs. 2048 - _LT_TAGVAR(hardcode_action, $1)=immediate 2049 - fi 2050 -else 2051 - # We cannot hardcode anything, or else we can only hardcode existing 2052 - # directories. 2053 - _LT_TAGVAR(hardcode_action, $1)=unsupported 2054 -fi 2055 -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) 2056 - 2057 -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || 2058 - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then 2059 - # Fast installation is not supported 2060 - enable_fast_install=no 2061 -elif test "$shlibpath_overrides_runpath" = yes || 2062 - test "$enable_shared" = no; then 2063 - # Fast installation is not necessary 2064 - enable_fast_install=needless 2065 -fi 2066 -_LT_TAGDECL([], [hardcode_action], [0], 2067 - [How to hardcode a shared library path into an executable]) 2068 -])# _LT_LINKER_HARDCODE_LIBPATH 2069 - 2070 - 2071 -# _LT_CMD_STRIPLIB 2072 -# ---------------- 2073 -m4_defun([_LT_CMD_STRIPLIB], 2074 -[m4_require([_LT_DECL_EGREP]) 2075 -striplib= 2076 -old_striplib= 2077 -AC_MSG_CHECKING([whether stripping libraries is possible]) 2078 -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then 2079 - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" 2080 - test -z "$striplib" && striplib="$STRIP --strip-unneeded" 2081 - AC_MSG_RESULT([yes]) 2082 -else 2083 -# FIXME - insert some real tests, host_os isn't really good enough 2084 - case $host_os in 2085 - darwin*) 2086 - if test -n "$STRIP" ; then 2087 - striplib="$STRIP -x" 2088 - old_striplib="$STRIP -S" 2089 - AC_MSG_RESULT([yes]) 2090 - else 2091 - AC_MSG_RESULT([no]) 2092 - fi 2093 - ;; 2094 - *) 2095 - AC_MSG_RESULT([no]) 2096 - ;; 2097 - esac 2098 -fi 2099 -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) 2100 -_LT_DECL([], [striplib], [1]) 2101 -])# _LT_CMD_STRIPLIB 2102 - 2103 - 2104 -# _LT_SYS_DYNAMIC_LINKER([TAG]) 2105 -# ----------------------------- 2106 -# PORTME Fill in your ld.so characteristics 2107 -m4_defun([_LT_SYS_DYNAMIC_LINKER], 2108 -[AC_REQUIRE([AC_CANONICAL_HOST])dnl 2109 -m4_require([_LT_DECL_EGREP])dnl 2110 -m4_require([_LT_FILEUTILS_DEFAULTS])dnl 2111 -m4_require([_LT_DECL_OBJDUMP])dnl 2112 -m4_require([_LT_DECL_SED])dnl 2113 -m4_require([_LT_CHECK_SHELL_FEATURES])dnl 2114 -AC_MSG_CHECKING([dynamic linker characteristics]) 2115 -m4_if([$1], 2116 - [], [ 2117 -if test "$GCC" = yes; then 2118 - case $host_os in 2119 - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; 2120 - *) lt_awk_arg="/^libraries:/" ;; 2121 - esac 2122 - case $host_os in 2123 - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; 2124 - *) lt_sed_strip_eq="s,=/,/,g" ;; 2125 - esac 2126 - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` 2127 - case $lt_search_path_spec in 2128 - *\;*) 2129 - # if the path contains ";" then we assume it to be the separator 2130 - # otherwise default to the standard path separator (i.e. ":") - it is 2131 - # assumed that no part of a normal pathname contains ";" but that should 2132 - # okay in the real world where ";" in dirpaths is itself problematic. 2133 - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` 2134 - ;; 2135 - *) 2136 - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` 2137 - ;; 2138 - esac 2139 - # Ok, now we have the path, separated by spaces, we can step through it 2140 - # and add multilib dir if necessary. 2141 - lt_tmp_lt_search_path_spec= 2142 - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` 2143 - for lt_sys_path in $lt_search_path_spec; do 2144 - if test -d "$lt_sys_path/$lt_multi_os_dir"; then 2145 - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" 2146 - else 2147 - test -d "$lt_sys_path" && \ 2148 - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" 2149 - fi 2150 - done 2151 - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' 2152 -BEGIN {RS=" "; FS="/|\n";} { 2153 - lt_foo=""; 2154 - lt_count=0; 2155 - for (lt_i = NF; lt_i > 0; lt_i--) { 2156 - if ($lt_i != "" && $lt_i != ".") { 2157 - if ($lt_i == "..") { 2158 - lt_count++; 2159 - } else { 2160 - if (lt_count == 0) { 2161 - lt_foo="/" $lt_i lt_foo; 2162 - } else { 2163 - lt_count--; 2164 - } 2165 - } 2166 - } 2167 - } 2168 - if (lt_foo != "") { lt_freq[[lt_foo]]++; } 2169 - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } 2170 -}'` 2171 - # AWK program above erroneously prepends '/' to C:/dos/paths 2172 - # for these hosts. 2173 - case $host_os in 2174 - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ 2175 - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; 2176 - esac 2177 - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` 2178 -else 2179 - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" 2180 -fi]) 2181 -library_names_spec= 2182 -libname_spec='lib$name' 2183 -soname_spec= 2184 -shrext_cmds=".so" 2185 -postinstall_cmds= 2186 -postuninstall_cmds= 2187 -finish_cmds= 2188 -finish_eval= 2189 -shlibpath_var= 2190 -shlibpath_overrides_runpath=unknown 2191 -version_type=none 2192 -dynamic_linker="$host_os ld.so" 2193 -sys_lib_dlsearch_path_spec="/lib /usr/lib" 2194 -need_lib_prefix=unknown 2195 -hardcode_into_libs=no 2196 - 2197 -# when you set need_version to no, make sure it does not cause -set_version 2198 -# flags to be left without arguments 2199 -need_version=unknown 2200 - 2201 -case $host_os in 2202 -aix3*) 2203 - version_type=linux 2204 - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' 2205 - shlibpath_var=LIBPATH 2206 - 2207 - # AIX 3 has no versioning support, so we append a major version to the name. 2208 - soname_spec='${libname}${release}${shared_ext}$major' 2209 - ;; 2210 - 2211 -aix[[4-9]]*) 2212 - version_type=linux 2213 - need_lib_prefix=no 2214 - need_version=no 2215 - hardcode_into_libs=yes 2216 - if test "$host_cpu" = ia64; then 2217 - # AIX 5 supports IA64 2218 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' 2219 - shlibpath_var=LD_LIBRARY_PATH 2220 - else 2221 - # With GCC up to 2.95.x, collect2 would create an import file 2222 - # for dependence libraries. The import file would start with 2223 - # the line `#! .'. This would cause the generated library to 2224 - # depend on `.', always an invalid library. This was fixed in 2225 - # development snapshots of GCC prior to 3.0. 2226 - case $host_os in 2227 - aix4 | aix4.[[01]] | aix4.[[01]].*) 2228 - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' 2229 - echo ' yes ' 2230 - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then 2231 - : 2232 - else 2233 - can_build_shared=no 2234 - fi 2235 - ;; 2236 - esac 2237 - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct 2238 - # soname into executable. Probably we can add versioning support to 2239 - # collect2, so additional links can be useful in future. 2240 - if test "$aix_use_runtimelinking" = yes; then 2241 - # If using run time linking (on AIX 4.2 or later) use lib<name>.so 2242 - # instead of lib<name>.a to let people know that these are not 2243 - # typical AIX shared libraries. 2244 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2245 - else 2246 - # We preserve .a as extension for shared libraries through AIX4.2 2247 - # and later when we are not doing run time linking. 2248 - library_names_spec='${libname}${release}.a $libname.a' 2249 - soname_spec='${libname}${release}${shared_ext}$major' 2250 - fi 2251 - shlibpath_var=LIBPATH 2252 - fi 2253 - ;; 2254 - 2255 -amigaos*) 2256 - case $host_cpu in 2257 - powerpc) 2258 - # Since July 2007 AmigaOS4 officially supports .so libraries. 2259 - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. 2260 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2261 - ;; 2262 - m68k) 2263 - library_names_spec='$libname.ixlibrary $libname.a' 2264 - # Create ${libname}_ixlibrary.a entries in /sys/libs. 2265 - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' 2266 - ;; 2267 - esac 2268 - ;; 2269 - 2270 -beos*) 2271 - library_names_spec='${libname}${shared_ext}' 2272 - dynamic_linker="$host_os ld.so" 2273 - shlibpath_var=LIBRARY_PATH 2274 - ;; 2275 - 2276 -bsdi[[45]]*) 2277 - version_type=linux 2278 - need_version=no 2279 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2280 - soname_spec='${libname}${release}${shared_ext}$major' 2281 - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' 2282 - shlibpath_var=LD_LIBRARY_PATH 2283 - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" 2284 - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" 2285 - # the default ld.so.conf also contains /usr/contrib/lib and 2286 - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow 2287 - # libtool to hard-code these into programs 2288 - ;; 2289 - 2290 -cygwin* | mingw* | pw32* | cegcc*) 2291 - version_type=windows 2292 - shrext_cmds=".dll" 2293 - need_version=no 2294 - need_lib_prefix=no 2295 - 2296 - case $GCC,$cc_basename in 2297 - yes,*) 2298 - # gcc 2299 - library_names_spec='$libname.dll.a' 2300 - # DLL is installed to $(libdir)/../bin by postinstall_cmds 2301 - postinstall_cmds='base_file=`basename \${file}`~ 2302 - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ 2303 - dldir=$destdir/`dirname \$dlpath`~ 2304 - test -d \$dldir || mkdir -p \$dldir~ 2305 - $install_prog $dir/$dlname \$dldir/$dlname~ 2306 - chmod a+x \$dldir/$dlname~ 2307 - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then 2308 - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; 2309 - fi' 2310 - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ 2311 - dlpath=$dir/\$dldll~ 2312 - $RM \$dlpath' 2313 - shlibpath_overrides_runpath=yes 2314 - 2315 - case $host_os in 2316 - cygwin*) 2317 - # Cygwin DLLs use 'cyg' prefix rather than 'lib' 2318 - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' 2319 -m4_if([$1], [],[ 2320 - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) 2321 - ;; 2322 - mingw* | cegcc*) 2323 - # MinGW DLLs use traditional 'lib' prefix 2324 - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' 2325 - ;; 2326 - pw32*) 2327 - # pw32 DLLs use 'pw' prefix rather than 'lib' 2328 - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' 2329 - ;; 2330 - esac 2331 - dynamic_linker='Win32 ld.exe' 2332 - ;; 2333 - 2334 - *,cl*) 2335 - # Native MSVC 2336 - libname_spec='$name' 2337 - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' 2338 - library_names_spec='${libname}.dll.lib' 2339 - 2340 - case $build_os in 2341 - mingw*) 2342 - sys_lib_search_path_spec= 2343 - lt_save_ifs=$IFS 2344 - IFS=';' 2345 - for lt_path in $LIB 2346 - do 2347 - IFS=$lt_save_ifs 2348 - # Let DOS variable expansion print the short 8.3 style file name. 2349 - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` 2350 - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" 2351 - done 2352 - IFS=$lt_save_ifs 2353 - # Convert to MSYS style. 2354 - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` 2355 - ;; 2356 - cygwin*) 2357 - # Convert to unix form, then to dos form, then back to unix form 2358 - # but this time dos style (no spaces!) so that the unix form looks 2359 - # like /cygdrive/c/PROGRA~1:/cygdr... 2360 - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` 2361 - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` 2362 - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` 2363 - ;; 2364 - *) 2365 - sys_lib_search_path_spec="$LIB" 2366 - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then 2367 - # It is most probably a Windows format PATH. 2368 - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` 2369 - else 2370 - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` 2371 - fi 2372 - # FIXME: find the short name or the path components, as spaces are 2373 - # common. (e.g. "Program Files" -> "PROGRA~1") 2374 - ;; 2375 - esac 2376 - 2377 - # DLL is installed to $(libdir)/../bin by postinstall_cmds 2378 - postinstall_cmds='base_file=`basename \${file}`~ 2379 - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ 2380 - dldir=$destdir/`dirname \$dlpath`~ 2381 - test -d \$dldir || mkdir -p \$dldir~ 2382 - $install_prog $dir/$dlname \$dldir/$dlname' 2383 - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ 2384 - dlpath=$dir/\$dldll~ 2385 - $RM \$dlpath' 2386 - shlibpath_overrides_runpath=yes 2387 - dynamic_linker='Win32 link.exe' 2388 - ;; 2389 - 2390 - *) 2391 - # Assume MSVC wrapper 2392 - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' 2393 - dynamic_linker='Win32 ld.exe' 2394 - ;; 2395 - esac 2396 - # FIXME: first we should search . and the directory the executable is in 2397 - shlibpath_var=PATH 2398 - ;; 2399 - 2400 -darwin* | rhapsody*) 2401 - dynamic_linker="$host_os dyld" 2402 - version_type=darwin 2403 - need_lib_prefix=no 2404 - need_version=no 2405 - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' 2406 - soname_spec='${libname}${release}${major}$shared_ext' 2407 - shlibpath_overrides_runpath=yes 2408 - shlibpath_var=DYLD_LIBRARY_PATH 2409 - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' 2410 -m4_if([$1], [],[ 2411 - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) 2412 - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' 2413 - ;; 2414 - 2415 -dgux*) 2416 - version_type=linux 2417 - need_lib_prefix=no 2418 - need_version=no 2419 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' 2420 - soname_spec='${libname}${release}${shared_ext}$major' 2421 - shlibpath_var=LD_LIBRARY_PATH 2422 - ;; 2423 - 2424 -freebsd1*) 2425 - dynamic_linker=no 2426 - ;; 2427 - 2428 -freebsd* | dragonfly*) 2429 - # DragonFly does not have aout. When/if they implement a new 2430 - # versioning mechanism, adjust this. 2431 - if test -x /usr/bin/objformat; then 2432 - objformat=`/usr/bin/objformat` 2433 - else 2434 - case $host_os in 2435 - freebsd[[123]]*) objformat=aout ;; 2436 - *) objformat=elf ;; 2437 - esac 2438 - fi 2439 - version_type=freebsd-$objformat 2440 - case $version_type in 2441 - freebsd-elf*) 2442 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' 2443 - need_version=no 2444 - need_lib_prefix=no 2445 - ;; 2446 - freebsd-*) 2447 - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' 2448 - need_version=yes 2449 - ;; 2450 - esac 2451 - shlibpath_var=LD_LIBRARY_PATH 2452 - case $host_os in 2453 - freebsd2*) 2454 - shlibpath_overrides_runpath=yes 2455 - ;; 2456 - freebsd3.[[01]]* | freebsdelf3.[[01]]*) 2457 - shlibpath_overrides_runpath=yes 2458 - hardcode_into_libs=yes 2459 - ;; 2460 - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ 2461 - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) 2462 - shlibpath_overrides_runpath=no 2463 - hardcode_into_libs=yes 2464 - ;; 2465 - *) # from 4.6 on, and DragonFly 2466 - shlibpath_overrides_runpath=yes 2467 - hardcode_into_libs=yes 2468 - ;; 2469 - esac 2470 - ;; 2471 - 2472 -gnu*) 2473 - version_type=linux 2474 - need_lib_prefix=no 2475 - need_version=no 2476 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' 2477 - soname_spec='${libname}${release}${shared_ext}$major' 2478 - shlibpath_var=LD_LIBRARY_PATH 2479 - hardcode_into_libs=yes 2480 - ;; 2481 - 2482 -haiku*) 2483 - version_type=linux 2484 - need_lib_prefix=no 2485 - need_version=no 2486 - dynamic_linker="$host_os runtime_loader" 2487 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' 2488 - soname_spec='${libname}${release}${shared_ext}$major' 2489 - shlibpath_var=LIBRARY_PATH 2490 - shlibpath_overrides_runpath=yes 2491 - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' 2492 - hardcode_into_libs=yes 2493 - ;; 2494 - 2495 -hpux9* | hpux10* | hpux11*) 2496 - # Give a soname corresponding to the major version so that dld.sl refuses to 2497 - # link against other versions. 2498 - version_type=sunos 2499 - need_lib_prefix=no 2500 - need_version=no 2501 - case $host_cpu in 2502 - ia64*) 2503 - shrext_cmds='.so' 2504 - hardcode_into_libs=yes 2505 - dynamic_linker="$host_os dld.so" 2506 - shlibpath_var=LD_LIBRARY_PATH 2507 - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. 2508 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2509 - soname_spec='${libname}${release}${shared_ext}$major' 2510 - if test "X$HPUX_IA64_MODE" = X32; then 2511 - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" 2512 - else 2513 - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" 2514 - fi 2515 - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec 2516 - ;; 2517 - hppa*64*) 2518 - shrext_cmds='.sl' 2519 - hardcode_into_libs=yes 2520 - dynamic_linker="$host_os dld.sl" 2521 - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH 2522 - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. 2523 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2524 - soname_spec='${libname}${release}${shared_ext}$major' 2525 - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" 2526 - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec 2527 - ;; 2528 - *) 2529 - shrext_cmds='.sl' 2530 - dynamic_linker="$host_os dld.sl" 2531 - shlibpath_var=SHLIB_PATH 2532 - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH 2533 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2534 - soname_spec='${libname}${release}${shared_ext}$major' 2535 - ;; 2536 - esac 2537 - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... 2538 - postinstall_cmds='chmod 555 $lib' 2539 - # or fails outright, so override atomically: 2540 - install_override_mode=555 2541 - ;; 2542 - 2543 -interix[[3-9]]*) 2544 - version_type=linux 2545 - need_lib_prefix=no 2546 - need_version=no 2547 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' 2548 - soname_spec='${libname}${release}${shared_ext}$major' 2549 - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' 2550 - shlibpath_var=LD_LIBRARY_PATH 2551 - shlibpath_overrides_runpath=no 2552 - hardcode_into_libs=yes 2553 - ;; 2554 - 2555 -irix5* | irix6* | nonstopux*) 2556 - case $host_os in 2557 - nonstopux*) version_type=nonstopux ;; 2558 - *) 2559 - if test "$lt_cv_prog_gnu_ld" = yes; then 2560 - version_type=linux 2561 - else 2562 - version_type=irix 2563 - fi ;; 2564 - esac 2565 - need_lib_prefix=no 2566 - need_version=no 2567 - soname_spec='${libname}${release}${shared_ext}$major' 2568 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' 2569 - case $host_os in 2570 - irix5* | nonstopux*) 2571 - libsuff= shlibsuff= 2572 - ;; 2573 - *) 2574 - case $LD in # libtool.m4 will add one of these switches to LD 2575 - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") 2576 - libsuff= shlibsuff= libmagic=32-bit;; 2577 - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") 2578 - libsuff=32 shlibsuff=N32 libmagic=N32;; 2579 - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") 2580 - libsuff=64 shlibsuff=64 libmagic=64-bit;; 2581 - *) libsuff= shlibsuff= libmagic=never-match;; 2582 - esac 2583 - ;; 2584 - esac 2585 - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH 2586 - shlibpath_overrides_runpath=no 2587 - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" 2588 - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" 2589 - hardcode_into_libs=yes 2590 - ;; 2591 - 2592 -# No shared lib support for Linux oldld, aout, or coff. 2593 -linux*oldld* | linux*aout* | linux*coff*) 2594 - dynamic_linker=no 2595 - ;; 2596 - 2597 -# This must be Linux ELF. 2598 -linux* | k*bsd*-gnu | kopensolaris*-gnu) 2599 - version_type=linux 2600 - need_lib_prefix=no 2601 - need_version=no 2602 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2603 - soname_spec='${libname}${release}${shared_ext}$major' 2604 - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' 2605 - shlibpath_var=LD_LIBRARY_PATH 2606 - shlibpath_overrides_runpath=no 2607 - 2608 - # Some binutils ld are patched to set DT_RUNPATH 2609 - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], 2610 - [lt_cv_shlibpath_overrides_runpath=no 2611 - save_LDFLAGS=$LDFLAGS 2612 - save_libdir=$libdir 2613 - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ 2614 - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" 2615 - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], 2616 - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], 2617 - [lt_cv_shlibpath_overrides_runpath=yes])]) 2618 - LDFLAGS=$save_LDFLAGS 2619 - libdir=$save_libdir 2620 - ]) 2621 - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath 2622 - 2623 - # This implies no fast_install, which is unacceptable. 2624 - # Some rework will be needed to allow for fast_install 2625 - # before this can be enabled. 2626 - hardcode_into_libs=yes 2627 - 2628 - # Add ABI-specific directories to the system library path. 2629 - sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" 2630 - 2631 - # Append ld.so.conf contents to the search path 2632 - if test -f /etc/ld.so.conf; then 2633 - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` 2634 - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" 2635 - 2636 - fi 2637 - 2638 - # We used to test for /lib/ld.so.1 and disable shared libraries on 2639 - # powerpc, because MkLinux only supported shared libraries with the 2640 - # GNU dynamic linker. Since this was broken with cross compilers, 2641 - # most powerpc-linux boxes support dynamic linking these days and 2642 - # people can always --disable-shared, the test was removed, and we 2643 - # assume the GNU/Linux dynamic linker is in use. 2644 - dynamic_linker='GNU/Linux ld.so' 2645 - ;; 2646 - 2647 -netbsd*) 2648 - version_type=sunos 2649 - need_lib_prefix=no 2650 - need_version=no 2651 - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then 2652 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' 2653 - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' 2654 - dynamic_linker='NetBSD (a.out) ld.so' 2655 - else 2656 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' 2657 - soname_spec='${libname}${release}${shared_ext}$major' 2658 - dynamic_linker='NetBSD ld.elf_so' 2659 - fi 2660 - shlibpath_var=LD_LIBRARY_PATH 2661 - shlibpath_overrides_runpath=yes 2662 - hardcode_into_libs=yes 2663 - ;; 2664 - 2665 -newsos6) 2666 - version_type=linux 2667 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2668 - shlibpath_var=LD_LIBRARY_PATH 2669 - shlibpath_overrides_runpath=yes 2670 - ;; 2671 - 2672 -*nto* | *qnx*) 2673 - version_type=qnx 2674 - need_lib_prefix=no 2675 - need_version=no 2676 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2677 - soname_spec='${libname}${release}${shared_ext}$major' 2678 - shlibpath_var=LD_LIBRARY_PATH 2679 - shlibpath_overrides_runpath=no 2680 - hardcode_into_libs=yes 2681 - dynamic_linker='ldqnx.so' 2682 - ;; 2683 - 2684 -openbsd*) 2685 - version_type=sunos 2686 - sys_lib_dlsearch_path_spec="/usr/lib" 2687 - need_lib_prefix=no 2688 - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. 2689 - case $host_os in 2690 - openbsd3.3 | openbsd3.3.*) need_version=yes ;; 2691 - *) need_version=no ;; 2692 - esac 2693 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' 2694 - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' 2695 - shlibpath_var=LD_LIBRARY_PATH 2696 - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then 2697 - case $host_os in 2698 - openbsd2.[[89]] | openbsd2.[[89]].*) 2699 - shlibpath_overrides_runpath=no 2700 - ;; 2701 - *) 2702 - shlibpath_overrides_runpath=yes 2703 - ;; 2704 - esac 2705 - else 2706 - shlibpath_overrides_runpath=yes 2707 - fi 2708 - ;; 2709 - 2710 -os2*) 2711 - libname_spec='$name' 2712 - shrext_cmds=".dll" 2713 - need_lib_prefix=no 2714 - library_names_spec='$libname${shared_ext} $libname.a' 2715 - dynamic_linker='OS/2 ld.exe' 2716 - shlibpath_var=LIBPATH 2717 - ;; 2718 - 2719 -osf3* | osf4* | osf5*) 2720 - version_type=osf 2721 - need_lib_prefix=no 2722 - need_version=no 2723 - soname_spec='${libname}${release}${shared_ext}$major' 2724 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2725 - shlibpath_var=LD_LIBRARY_PATH 2726 - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" 2727 - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" 2728 - ;; 2729 - 2730 -rdos*) 2731 - dynamic_linker=no 2732 - ;; 2733 - 2734 -solaris*) 2735 - version_type=linux 2736 - need_lib_prefix=no 2737 - need_version=no 2738 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2739 - soname_spec='${libname}${release}${shared_ext}$major' 2740 - shlibpath_var=LD_LIBRARY_PATH 2741 - shlibpath_overrides_runpath=yes 2742 - hardcode_into_libs=yes 2743 - # ldd complains unless libraries are executable 2744 - postinstall_cmds='chmod +x $lib' 2745 - ;; 2746 - 2747 -sunos4*) 2748 - version_type=sunos 2749 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' 2750 - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' 2751 - shlibpath_var=LD_LIBRARY_PATH 2752 - shlibpath_overrides_runpath=yes 2753 - if test "$with_gnu_ld" = yes; then 2754 - need_lib_prefix=no 2755 - fi 2756 - need_version=yes 2757 - ;; 2758 - 2759 -sysv4 | sysv4.3*) 2760 - version_type=linux 2761 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2762 - soname_spec='${libname}${release}${shared_ext}$major' 2763 - shlibpath_var=LD_LIBRARY_PATH 2764 - case $host_vendor in 2765 - sni) 2766 - shlibpath_overrides_runpath=no 2767 - need_lib_prefix=no 2768 - runpath_var=LD_RUN_PATH 2769 - ;; 2770 - siemens) 2771 - need_lib_prefix=no 2772 - ;; 2773 - motorola) 2774 - need_lib_prefix=no 2775 - need_version=no 2776 - shlibpath_overrides_runpath=no 2777 - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' 2778 - ;; 2779 - esac 2780 - ;; 2781 - 2782 -sysv4*MP*) 2783 - if test -d /usr/nec ;then 2784 - version_type=linux 2785 - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' 2786 - soname_spec='$libname${shared_ext}.$major' 2787 - shlibpath_var=LD_LIBRARY_PATH 2788 - fi 2789 - ;; 2790 - 2791 -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) 2792 - version_type=freebsd-elf 2793 - need_lib_prefix=no 2794 - need_version=no 2795 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' 2796 - soname_spec='${libname}${release}${shared_ext}$major' 2797 - shlibpath_var=LD_LIBRARY_PATH 2798 - shlibpath_overrides_runpath=yes 2799 - hardcode_into_libs=yes 2800 - if test "$with_gnu_ld" = yes; then 2801 - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' 2802 - else 2803 - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' 2804 - case $host_os in 2805 - sco3.2v5*) 2806 - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" 2807 - ;; 2808 - esac 2809 - fi 2810 - sys_lib_dlsearch_path_spec='/usr/lib' 2811 - ;; 2812 - 2813 -tpf*) 2814 - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. 2815 - version_type=linux 2816 - need_lib_prefix=no 2817 - need_version=no 2818 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2819 - shlibpath_var=LD_LIBRARY_PATH 2820 - shlibpath_overrides_runpath=no 2821 - hardcode_into_libs=yes 2822 - ;; 2823 - 2824 -uts4*) 2825 - version_type=linux 2826 - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' 2827 - soname_spec='${libname}${release}${shared_ext}$major' 2828 - shlibpath_var=LD_LIBRARY_PATH 2829 - ;; 2830 - 2831 -*) 2832 - dynamic_linker=no 2833 - ;; 2834 -esac 2835 -AC_MSG_RESULT([$dynamic_linker]) 2836 -test "$dynamic_linker" = no && can_build_shared=no 2837 - 2838 -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" 2839 -if test "$GCC" = yes; then 2840 - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" 2841 -fi 2842 - 2843 -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then 2844 - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" 2845 -fi 2846 -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then 2847 - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" 2848 -fi 2849 - 2850 -_LT_DECL([], [variables_saved_for_relink], [1], 2851 - [Variables whose values should be saved in libtool wrapper scripts and 2852 - restored at link time]) 2853 -_LT_DECL([], [need_lib_prefix], [0], 2854 - [Do we need the "lib" prefix for modules?]) 2855 -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) 2856 -_LT_DECL([], [version_type], [0], [Library versioning type]) 2857 -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) 2858 -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) 2859 -_LT_DECL([], [shlibpath_overrides_runpath], [0], 2860 - [Is shlibpath searched before the hard-coded library search path?]) 2861 -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) 2862 -_LT_DECL([], [library_names_spec], [1], 2863 - [[List of archive names. First name is the real one, the rest are links. 2864 - The last name is the one that the linker finds with -lNAME]]) 2865 -_LT_DECL([], [soname_spec], [1], 2866 - [[The coded name of the library, if different from the real name]]) 2867 -_LT_DECL([], [install_override_mode], [1], 2868 - [Permission mode override for installation of shared libraries]) 2869 -_LT_DECL([], [postinstall_cmds], [2], 2870 - [Command to use after installation of a shared archive]) 2871 -_LT_DECL([], [postuninstall_cmds], [2], 2872 - [Command to use after uninstallation of a shared archive]) 2873 -_LT_DECL([], [finish_cmds], [2], 2874 - [Commands used to finish a libtool library installation in a directory]) 2875 -_LT_DECL([], [finish_eval], [1], 2876 - [[As "finish_cmds", except a single script fragment to be evaled but 2877 - not shown]]) 2878 -_LT_DECL([], [hardcode_into_libs], [0], 2879 - [Whether we should hardcode library paths into libraries]) 2880 -_LT_DECL([], [sys_lib_search_path_spec], [2], 2881 - [Compile-time system search path for libraries]) 2882 -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], 2883 - [Run-time system search path for libraries]) 2884 -])# _LT_SYS_DYNAMIC_LINKER 2885 - 2886 - 2887 -# _LT_PATH_TOOL_PREFIX(TOOL) 2888 -# -------------------------- 2889 -# find a file program which can recognize shared library 2890 -AC_DEFUN([_LT_PATH_TOOL_PREFIX], 2891 -[m4_require([_LT_DECL_EGREP])dnl 2892 -AC_MSG_CHECKING([for $1]) 2893 -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, 2894 -[case $MAGIC_CMD in 2895 -[[\\/*] | ?:[\\/]*]) 2896 - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. 2897 - ;; 2898 -*) 2899 - lt_save_MAGIC_CMD="$MAGIC_CMD" 2900 - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR 2901 -dnl $ac_dummy forces splitting on constant user-supplied paths. 2902 -dnl POSIX.2 word splitting is done only on the output of word expansions, 2903 -dnl not every word. This closes a longstanding sh security hole. 2904 - ac_dummy="m4_if([$2], , $PATH, [$2])" 2905 - for ac_dir in $ac_dummy; do 2906 - IFS="$lt_save_ifs" 2907 - test -z "$ac_dir" && ac_dir=. 2908 - if test -f $ac_dir/$1; then 2909 - lt_cv_path_MAGIC_CMD="$ac_dir/$1" 2910 - if test -n "$file_magic_test_file"; then 2911 - case $deplibs_check_method in 2912 - "file_magic "*) 2913 - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` 2914 - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" 2915 - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | 2916 - $EGREP "$file_magic_regex" > /dev/null; then 2917 - : 2918 - else 2919 - cat <<_LT_EOF 1>&2 2920 - 2921 -*** Warning: the command libtool uses to detect shared libraries, 2922 -*** $file_magic_cmd, produces output that libtool cannot recognize. 2923 -*** The result is that libtool may fail to recognize shared libraries 2924 -*** as such. This will affect the creation of libtool libraries that 2925 -*** depend on shared libraries, but programs linked with such libtool 2926 -*** libraries will work regardless of this problem. Nevertheless, you 2927 -*** may want to report the problem to your system manager and/or to 2928 -*** bug-libtool@gnu.org 2929 - 2930 -_LT_EOF 2931 - fi ;; 2932 - esac 2933 - fi 2934 - break 2935 - fi 2936 - done 2937 - IFS="$lt_save_ifs" 2938 - MAGIC_CMD="$lt_save_MAGIC_CMD" 2939 - ;; 2940 -esac]) 2941 -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" 2942 -if test -n "$MAGIC_CMD"; then 2943 - AC_MSG_RESULT($MAGIC_CMD) 2944 -else 2945 - AC_MSG_RESULT(no) 2946 -fi 2947 -_LT_DECL([], [MAGIC_CMD], [0], 2948 - [Used to examine libraries when file_magic_cmd begins with "file"])dnl 2949 -])# _LT_PATH_TOOL_PREFIX 2950 - 2951 -# Old name: 2952 -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) 2953 -dnl aclocal-1.4 backwards compatibility: 2954 -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) 2955 - 2956 - 2957 -# _LT_PATH_MAGIC 2958 -# -------------- 2959 -# find a file program which can recognize a shared library 2960 -m4_defun([_LT_PATH_MAGIC], 2961 -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) 2962 -if test -z "$lt_cv_path_MAGIC_CMD"; then 2963 - if test -n "$ac_tool_prefix"; then 2964 - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) 2965 - else 2966 - MAGIC_CMD=: 2967 - fi 2968 -fi 2969 -])# _LT_PATH_MAGIC 2970 - 2971 - 2972 -# LT_PATH_LD 2973 -# ---------- 2974 -# find the pathname to the GNU or non-GNU linker 2975 -AC_DEFUN([LT_PATH_LD], 2976 -[AC_REQUIRE([AC_PROG_CC])dnl 2977 -AC_REQUIRE([AC_CANONICAL_HOST])dnl 2978 -AC_REQUIRE([AC_CANONICAL_BUILD])dnl 2979 -m4_require([_LT_DECL_SED])dnl 2980 -m4_require([_LT_DECL_EGREP])dnl 2981 -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl 2982 - 2983 -AC_ARG_WITH([gnu-ld], 2984 - [AS_HELP_STRING([--with-gnu-ld], 2985 - [assume the C compiler uses GNU ld @<:@default=no@:>@])], 2986 - [test "$withval" = no || with_gnu_ld=yes], 2987 - [with_gnu_ld=no])dnl 2988 - 2989 -ac_prog=ld 2990 -if test "$GCC" = yes; then 2991 - # Check if gcc -print-prog-name=ld gives a path. 2992 - AC_MSG_CHECKING([for ld used by $CC]) 2993 - case $host in 2994 - *-*-mingw*) 2995 - # gcc leaves a trailing carriage return which upsets mingw 2996 - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; 2997 - *) 2998 - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; 2999 - esac 3000 - case $ac_prog in 3001 - # Accept absolute paths. 3002 - [[\\/]]* | ?:[[\\/]]*) 3003 - re_direlt='/[[^/]][[^/]]*/\.\./' 3004 - # Canonicalize the pathname of ld 3005 - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` 3006 - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do 3007 - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` 3008 - done 3009 - test -z "$LD" && LD="$ac_prog" 3010 - ;; 3011 - "") 3012 - # If it fails, then pretend we aren't using GCC. 3013 - ac_prog=ld 3014 - ;; 3015 - *) 3016 - # If it is relative, then search for the first ld in PATH. 3017 - with_gnu_ld=unknown 3018 - ;; 3019 - esac 3020 -elif test "$with_gnu_ld" = yes; then 3021 - AC_MSG_CHECKING([for GNU ld]) 3022 -else 3023 - AC_MSG_CHECKING([for non-GNU ld]) 3024 -fi 3025 -AC_CACHE_VAL(lt_cv_path_LD, 3026 -[if test -z "$LD"; then 3027 - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR 3028 - for ac_dir in $PATH; do 3029 - IFS="$lt_save_ifs" 3030 - test -z "$ac_dir" && ac_dir=. 3031 - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then 3032 - lt_cv_path_LD="$ac_dir/$ac_prog" 3033 - # Check to see if the program is GNU ld. I'd rather use --version, 3034 - # but apparently some variants of GNU ld only accept -v. 3035 - # Break only if it was the GNU/non-GNU ld that we prefer. 3036 - case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in 3037 - *GNU* | *'with BFD'*) 3038 - test "$with_gnu_ld" != no && break 3039 - ;; 3040 - *) 3041 - test "$with_gnu_ld" != yes && break 3042 - ;; 3043 - esac 3044 - fi 3045 - done 3046 - IFS="$lt_save_ifs" 3047 -else 3048 - lt_cv_path_LD="$LD" # Let the user override the test with a path. 3049 -fi]) 3050 -LD="$lt_cv_path_LD" 3051 -if test -n "$LD"; then 3052 - AC_MSG_RESULT($LD) 3053 -else 3054 - AC_MSG_RESULT(no) 3055 -fi 3056 -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) 3057 -_LT_PATH_LD_GNU 3058 -AC_SUBST([LD]) 3059 - 3060 -_LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) 3061 -])# LT_PATH_LD 3062 - 3063 -# Old names: 3064 -AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) 3065 -AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) 3066 -dnl aclocal-1.4 backwards compatibility: 3067 -dnl AC_DEFUN([AM_PROG_LD], []) 3068 -dnl AC_DEFUN([AC_PROG_LD], []) 3069 - 3070 - 3071 -# _LT_PATH_LD_GNU 3072 -#- -------------- 3073 -m4_defun([_LT_PATH_LD_GNU], 3074 -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, 3075 -[# I'd rather use --version here, but apparently some GNU lds only accept -v. 3076 -case `$LD -v 2>&1 </dev/null` in 3077 -*GNU* | *'with BFD'*) 3078 - lt_cv_prog_gnu_ld=yes 3079 - ;; 3080 -*) 3081 - lt_cv_prog_gnu_ld=no 3082 - ;; 3083 -esac]) 3084 -with_gnu_ld=$lt_cv_prog_gnu_ld 3085 -])# _LT_PATH_LD_GNU 3086 - 3087 - 3088 -# _LT_CMD_RELOAD 3089 -# -------------- 3090 -# find reload flag for linker 3091 -# -- PORTME Some linkers may need a different reload flag. 3092 -m4_defun([_LT_CMD_RELOAD], 3093 -[AC_CACHE_CHECK([for $LD option to reload object files], 3094 - lt_cv_ld_reload_flag, 3095 - [lt_cv_ld_reload_flag='-r']) 3096 -reload_flag=$lt_cv_ld_reload_flag 3097 -case $reload_flag in 3098 -"" | " "*) ;; 3099 -*) reload_flag=" $reload_flag" ;; 3100 -esac 3101 -reload_cmds='$LD$reload_flag -o $output$reload_objs' 3102 -case $host_os in 3103 - cygwin* | mingw* | pw32* | cegcc*) 3104 - if test "$GCC" != yes; then 3105 - reload_cmds=false 3106 - fi 3107 - ;; 3108 - darwin*) 3109 - if test "$GCC" = yes; then 3110 - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' 3111 - else 3112 - reload_cmds='$LD$reload_flag -o $output$reload_objs' 3113 - fi 3114 - ;; 3115 -esac 3116 -_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl 3117 -_LT_TAGDECL([], [reload_cmds], [2])dnl 3118 -])# _LT_CMD_RELOAD 3119 - 3120 - 3121 -# _LT_CHECK_MAGIC_METHOD 3122 -# ---------------------- 3123 -# how to check for library dependencies 3124 -# -- PORTME fill in with the dynamic library characteristics 3125 -m4_defun([_LT_CHECK_MAGIC_METHOD], 3126 -[m4_require([_LT_DECL_EGREP]) 3127 -m4_require([_LT_DECL_OBJDUMP]) 3128 -AC_CACHE_CHECK([how to recognize dependent libraries], 3129 -lt_cv_deplibs_check_method, 3130 -[lt_cv_file_magic_cmd='$MAGIC_CMD' 3131 -lt_cv_file_magic_test_file= 3132 -lt_cv_deplibs_check_method='unknown' 3133 -# Need to set the preceding variable on all platforms that support 3134 -# interlibrary dependencies. 3135 -# 'none' -- dependencies not supported. 3136 -# `unknown' -- same as none, but documents that we really don't know. 3137 -# 'pass_all' -- all dependencies passed with no checks. 3138 -# 'test_compile' -- check by making test program. 3139 -# 'file_magic [[regex]]' -- check by looking for files in library path 3140 -# which responds to the $file_magic_cmd with a given extended regex. 3141 -# If you have `file' or equivalent on your system and you're not sure 3142 -# whether `pass_all' will *always* work, you probably want this one. 3143 - 3144 -case $host_os in 3145 -aix[[4-9]]*) 3146 - lt_cv_deplibs_check_method=pass_all 3147 - ;; 3148 - 3149 -beos*) 3150 - lt_cv_deplibs_check_method=pass_all 3151 - ;; 3152 - 3153 -bsdi[[45]]*) 3154 - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' 3155 - lt_cv_file_magic_cmd='/usr/bin/file -L' 3156 - lt_cv_file_magic_test_file=/shlib/libc.so 3157 - ;; 3158 - 3159 -cygwin*) 3160 - # func_win32_libid is a shell function defined in ltmain.sh 3161 - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' 3162 - lt_cv_file_magic_cmd='func_win32_libid' 3163 - ;; 3164 - 3165 -mingw* | pw32*) 3166 - # Base MSYS/MinGW do not provide the 'file' command needed by 3167 - # func_win32_libid shell function, so use a weaker test based on 'objdump', 3168 - # unless we find 'file', for example because we are cross-compiling. 3169 - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. 3170 - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then 3171 - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' 3172 - lt_cv_file_magic_cmd='func_win32_libid' 3173 - else 3174 - # Keep this pattern in sync with the one in func_win32_libid. 3175 - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' 3176 - lt_cv_file_magic_cmd='$OBJDUMP -f' 3177 - fi 3178 - ;; 3179 - 3180 -cegcc*) 3181 - # use the weaker test based on 'objdump'. See mingw*. 3182 - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' 3183 - lt_cv_file_magic_cmd='$OBJDUMP -f' 3184 - ;; 3185 - 3186 -darwin* | rhapsody*) 3187 - lt_cv_deplibs_check_method=pass_all 3188 - ;; 3189 - 3190 -freebsd* | dragonfly*) 3191 - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then 3192 - case $host_cpu in 3193 - i*86 ) 3194 - # Not sure whether the presence of OpenBSD here was a mistake. 3195 - # Let's accept both of them until this is cleared up. 3196 - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' 3197 - lt_cv_file_magic_cmd=/usr/bin/file 3198 - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` 3199 - ;; 3200 - esac 3201 - else 3202 - lt_cv_deplibs_check_method=pass_all 3203 - fi 3204 - ;; 3205 - 3206 -gnu*) 3207 - lt_cv_deplibs_check_method=pass_all 3208 - ;; 3209 - 3210 -haiku*) 3211 - lt_cv_deplibs_check_method=pass_all 3212 - ;; 3213 - 3214 -hpux10.20* | hpux11*) 3215 - lt_cv_file_magic_cmd=/usr/bin/file 3216 - case $host_cpu in 3217 - ia64*) 3218 - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' 3219 - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so 3220 - ;; 3221 - hppa*64*) 3222 - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] 3223 - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl 3224 - ;; 3225 - *) 3226 - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' 3227 - lt_cv_file_magic_test_file=/usr/lib/libc.sl 3228 - ;; 3229 - esac 3230 - ;; 3231 - 3232 -interix[[3-9]]*) 3233 - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here 3234 - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' 3235 - ;; 3236 - 3237 -irix5* | irix6* | nonstopux*) 3238 - case $LD in 3239 - *-32|*"-32 ") libmagic=32-bit;; 3240 - *-n32|*"-n32 ") libmagic=N32;; 3241 - *-64|*"-64 ") libmagic=64-bit;; 3242 - *) libmagic=never-match;; 3243 - esac 3244 - lt_cv_deplibs_check_method=pass_all 3245 - ;; 3246 - 3247 -# This must be Linux ELF. 3248 -linux* | k*bsd*-gnu | kopensolaris*-gnu) 3249 - lt_cv_deplibs_check_method=pass_all 3250 - ;; 3251 - 3252 -netbsd*) 3253 - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then 3254 - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' 3255 - else 3256 - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' 3257 - fi 3258 - ;; 3259 - 3260 -newos6*) 3261 - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' 3262 - lt_cv_file_magic_cmd=/usr/bin/file 3263 - lt_cv_file_magic_test_file=/usr/lib/libnls.so 3264 - ;; 3265 - 3266 -*nto* | *qnx*) 3267 - lt_cv_deplibs_check_method=pass_all 3268 - ;; 3269 - 3270 -openbsd*) 3271 - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then 3272 - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' 3273 - else 3274 - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' 3275 - fi 3276 - ;; 3277 - 3278 -osf3* | osf4* | osf5*) 3279 - lt_cv_deplibs_check_method=pass_all 3280 - ;; 3281 - 3282 -rdos*) 3283 - lt_cv_deplibs_check_method=pass_all 3284 - ;; 3285 - 3286 -solaris*) 3287 - lt_cv_deplibs_check_method=pass_all 3288 - ;; 3289 - 3290 -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) 3291 - lt_cv_deplibs_check_method=pass_all 3292 - ;; 3293 - 3294 -sysv4 | sysv4.3*) 3295 - case $host_vendor in 3296 - motorola) 3297 - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' 3298 - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` 3299 - ;; 3300 - ncr) 3301 - lt_cv_deplibs_check_method=pass_all 3302 - ;; 3303 - sequent) 3304 - lt_cv_file_magic_cmd='/bin/file' 3305 - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' 3306 - ;; 3307 - sni) 3308 - lt_cv_file_magic_cmd='/bin/file' 3309 - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" 3310 - lt_cv_file_magic_test_file=/lib/libc.so 3311 - ;; 3312 - siemens) 3313 - lt_cv_deplibs_check_method=pass_all 3314 - ;; 3315 - pc) 3316 - lt_cv_deplibs_check_method=pass_all 3317 - ;; 3318 - esac 3319 - ;; 3320 - 3321 -tpf*) 3322 - lt_cv_deplibs_check_method=pass_all 3323 - ;; 3324 -esac 3325 -]) 3326 - 3327 -file_magic_glob= 3328 -want_nocaseglob=no 3329 -if test "$build" = "$host"; then 3330 - case $host_os in 3331 - mingw* | pw32*) 3332 - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then 3333 - want_nocaseglob=yes 3334 - else 3335 - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` 3336 - fi 3337 - ;; 3338 - esac 3339 -fi 3340 - 3341 -file_magic_cmd=$lt_cv_file_magic_cmd 3342 -deplibs_check_method=$lt_cv_deplibs_check_method 3343 -test -z "$deplibs_check_method" && deplibs_check_method=unknown 3344 - 3345 -_LT_DECL([], [deplibs_check_method], [1], 3346 - [Method to check whether dependent libraries are shared objects]) 3347 -_LT_DECL([], [file_magic_cmd], [1], 3348 - [Command to use when deplibs_check_method = "file_magic"]) 3349 -_LT_DECL([], [file_magic_glob], [1], 3350 - [How to find potential files when deplibs_check_method = "file_magic"]) 3351 -_LT_DECL([], [want_nocaseglob], [1], 3352 - [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) 3353 -])# _LT_CHECK_MAGIC_METHOD 3354 - 3355 - 3356 -# LT_PATH_NM 3357 -# ---------- 3358 -# find the pathname to a BSD- or MS-compatible name lister 3359 -AC_DEFUN([LT_PATH_NM], 3360 -[AC_REQUIRE([AC_PROG_CC])dnl 3361 -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, 3362 -[if test -n "$NM"; then 3363 - # Let the user override the test. 3364 - lt_cv_path_NM="$NM" 3365 -else 3366 - lt_nm_to_check="${ac_tool_prefix}nm" 3367 - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then 3368 - lt_nm_to_check="$lt_nm_to_check nm" 3369 - fi 3370 - for lt_tmp_nm in $lt_nm_to_check; do 3371 - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR 3372 - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do 3373 - IFS="$lt_save_ifs" 3374 - test -z "$ac_dir" && ac_dir=. 3375 - tmp_nm="$ac_dir/$lt_tmp_nm" 3376 - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then 3377 - # Check to see if the nm accepts a BSD-compat flag. 3378 - # Adding the `sed 1q' prevents false positives on HP-UX, which says: 3379 - # nm: unknown option "B" ignored 3380 - # Tru64's nm complains that /dev/null is an invalid object file 3381 - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in 3382 - */dev/null* | *'Invalid file or object type'*) 3383 - lt_cv_path_NM="$tmp_nm -B" 3384 - break 3385 - ;; 3386 - *) 3387 - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in 3388 - */dev/null*) 3389 - lt_cv_path_NM="$tmp_nm -p" 3390 - break 3391 - ;; 3392 - *) 3393 - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but 3394 - continue # so that we can try to find one that supports BSD flags 3395 - ;; 3396 - esac 3397 - ;; 3398 - esac 3399 - fi 3400 - done 3401 - IFS="$lt_save_ifs" 3402 - done 3403 - : ${lt_cv_path_NM=no} 3404 -fi]) 3405 -if test "$lt_cv_path_NM" != "no"; then 3406 - NM="$lt_cv_path_NM" 3407 -else 3408 - # Didn't find any BSD compatible name lister, look for dumpbin. 3409 - if test -n "$DUMPBIN"; then : 3410 - # Let the user override the test. 3411 - else 3412 - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) 3413 - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in 3414 - *COFF*) 3415 - DUMPBIN="$DUMPBIN -symbols" 3416 - ;; 3417 - *) 3418 - DUMPBIN=: 3419 - ;; 3420 - esac 3421 - fi 3422 - AC_SUBST([DUMPBIN]) 3423 - if test "$DUMPBIN" != ":"; then 3424 - NM="$DUMPBIN" 3425 - fi 3426 -fi 3427 -test -z "$NM" && NM=nm 3428 -AC_SUBST([NM]) 3429 -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl 3430 - 3431 -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], 3432 - [lt_cv_nm_interface="BSD nm" 3433 - echo "int some_variable = 0;" > conftest.$ac_ext 3434 - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) 3435 - (eval "$ac_compile" 2>conftest.err) 3436 - cat conftest.err >&AS_MESSAGE_LOG_FD 3437 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) 3438 - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) 3439 - cat conftest.err >&AS_MESSAGE_LOG_FD 3440 - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) 3441 - cat conftest.out >&AS_MESSAGE_LOG_FD 3442 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then 3443 - lt_cv_nm_interface="MS dumpbin" 3444 - fi 3445 - rm -f conftest*]) 3446 -])# LT_PATH_NM 3447 - 3448 -# Old names: 3449 -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) 3450 -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) 3451 -dnl aclocal-1.4 backwards compatibility: 3452 -dnl AC_DEFUN([AM_PROG_NM], []) 3453 -dnl AC_DEFUN([AC_PROG_NM], []) 3454 - 3455 -# _LT_CHECK_SHAREDLIB_FROM_LINKLIB 3456 -# -------------------------------- 3457 -# how to determine the name of the shared library 3458 -# associated with a specific link library. 3459 -# -- PORTME fill in with the dynamic library characteristics 3460 -m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], 3461 -[m4_require([_LT_DECL_EGREP]) 3462 -m4_require([_LT_DECL_OBJDUMP]) 3463 -m4_require([_LT_DECL_DLLTOOL]) 3464 -AC_CACHE_CHECK([how to associate runtime and link libraries], 3465 -lt_cv_sharedlib_from_linklib_cmd, 3466 -[lt_cv_sharedlib_from_linklib_cmd='unknown' 3467 - 3468 -case $host_os in 3469 -cygwin* | mingw* | pw32* | cegcc*) 3470 - # two different shell functions defined in ltmain.sh 3471 - # decide which to use based on capabilities of $DLLTOOL 3472 - case `$DLLTOOL --help 2>&1` in 3473 - *--identify-strict*) 3474 - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib 3475 - ;; 3476 - *) 3477 - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback 3478 - ;; 3479 - esac 3480 - ;; 3481 -*) 3482 - # fallback: assume linklib IS sharedlib 3483 - lt_cv_sharedlib_from_linklib_cmd="$ECHO" 3484 - ;; 3485 -esac 3486 -]) 3487 -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd 3488 -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO 3489 - 3490 -_LT_DECL([], [sharedlib_from_linklib_cmd], [1], 3491 - [Command to associate shared and link libraries]) 3492 -])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB 3493 - 3494 - 3495 -# _LT_PATH_MANIFEST_TOOL 3496 -# ---------------------- 3497 -# locate the manifest tool 3498 -m4_defun([_LT_PATH_MANIFEST_TOOL], 3499 -[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) 3500 -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt 3501 -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], 3502 - [lt_cv_path_mainfest_tool=no 3503 - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD 3504 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out 3505 - cat conftest.err >&AS_MESSAGE_LOG_FD 3506 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then 3507 - lt_cv_path_mainfest_tool=yes 3508 - fi 3509 - rm -f conftest*]) 3510 -if test "x$lt_cv_path_mainfest_tool" != xyes; then 3511 - MANIFEST_TOOL=: 3512 -fi 3513 -_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl 3514 -])# _LT_PATH_MANIFEST_TOOL 3515 - 3516 - 3517 -# LT_LIB_M 3518 -# -------- 3519 -# check for math library 3520 -AC_DEFUN([LT_LIB_M], 3521 -[AC_REQUIRE([AC_CANONICAL_HOST])dnl 3522 -LIBM= 3523 -case $host in 3524 -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) 3525 - # These system don't have libm, or don't need it 3526 - ;; 3527 -*-ncr-sysv4.3*) 3528 - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") 3529 - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") 3530 - ;; 3531 -*) 3532 - AC_CHECK_LIB(m, cos, LIBM="-lm") 3533 - ;; 3534 -esac 3535 -AC_SUBST([LIBM]) 3536 -])# LT_LIB_M 3537 - 3538 -# Old name: 3539 -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) 3540 -dnl aclocal-1.4 backwards compatibility: 3541 -dnl AC_DEFUN([AC_CHECK_LIBM], []) 3542 - 3543 - 3544 -# _LT_COMPILER_NO_RTTI([TAGNAME]) 3545 -# ------------------------------- 3546 -m4_defun([_LT_COMPILER_NO_RTTI], 3547 -[m4_require([_LT_TAG_COMPILER])dnl 3548 - 3549 -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= 3550 - 3551 -if test "$GCC" = yes; then 3552 - case $cc_basename in 3553 - nvcc*) 3554 - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; 3555 - *) 3556 - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; 3557 - esac 3558 - 3559 - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], 3560 - lt_cv_prog_compiler_rtti_exceptions, 3561 - [-fno-rtti -fno-exceptions], [], 3562 - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) 3563 -fi 3564 -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], 3565 - [Compiler flag to turn off builtin functions]) 3566 -])# _LT_COMPILER_NO_RTTI 3567 - 3568 - 3569 -# _LT_CMD_GLOBAL_SYMBOLS 3570 -# ---------------------- 3571 -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], 3572 -[AC_REQUIRE([AC_CANONICAL_HOST])dnl 3573 -AC_REQUIRE([AC_PROG_CC])dnl 3574 -AC_REQUIRE([AC_PROG_AWK])dnl 3575 -AC_REQUIRE([LT_PATH_NM])dnl 3576 -AC_REQUIRE([LT_PATH_LD])dnl 3577 -m4_require([_LT_DECL_SED])dnl 3578 -m4_require([_LT_DECL_EGREP])dnl 3579 -m4_require([_LT_TAG_COMPILER])dnl 3580 - 3581 -# Check for command to grab the raw symbol name followed by C symbol from nm. 3582 -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) 3583 -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], 3584 -[ 3585 -# These are sane defaults that work on at least a few old systems. 3586 -# [They come from Ultrix. What could be older than Ultrix?!! ;)] 3587 - 3588 -# Character class describing NM global symbol codes. 3589 -symcode='[[BCDEGRST]]' 3590 - 3591 -# Regexp to match symbols that can be accessed directly from C. 3592 -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' 3593 - 3594 -# Define system-specific variables. 3595 -case $host_os in 3596 -aix*) 3597 - symcode='[[BCDT]]' 3598 - ;; 3599 -cygwin* | mingw* | pw32* | cegcc*) 3600 - symcode='[[ABCDGISTW]]' 3601 - ;; 3602 -hpux*) 3603 - if test "$host_cpu" = ia64; then 3604 - symcode='[[ABCDEGRST]]' 3605 - fi 3606 - ;; 3607 -irix* | nonstopux*) 3608 - symcode='[[BCDEGRST]]' 3609 - ;; 3610 -osf*) 3611 - symcode='[[BCDEGQRST]]' 3612 - ;; 3613 -solaris*) 3614 - symcode='[[BDRT]]' 3615 - ;; 3616 -sco3.2v5*) 3617 - symcode='[[DT]]' 3618 - ;; 3619 -sysv4.2uw2*) 3620 - symcode='[[DT]]' 3621 - ;; 3622 -sysv5* | sco5v6* | unixware* | OpenUNIX*) 3623 - symcode='[[ABDT]]' 3624 - ;; 3625 -sysv4) 3626 - symcode='[[DFNSTU]]' 3627 - ;; 3628 -esac 3629 - 3630 -# If we're using GNU nm, then use its standard symbol codes. 3631 -case `$NM -V 2>&1` in 3632 -*GNU* | *'with BFD'*) 3633 - symcode='[[ABCDGIRSTW]]' ;; 3634 -esac 3635 - 3636 -# Transform an extracted symbol line into a proper C declaration. 3637 -# Some systems (esp. on ia64) link data and code symbols differently, 3638 -# so use this general approach. 3639 -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" 3640 - 3641 -# Transform an extracted symbol line into symbol name and symbol address 3642 -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" 3643 -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" 3644 - 3645 -# Handle CRLF in mingw tool chain 3646 -opt_cr= 3647 -case $build_os in 3648 -mingw*) 3649 - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp 3650 - ;; 3651 -esac 3652 - 3653 -# Try without a prefix underscore, then with it. 3654 -for ac_symprfx in "" "_"; do 3655 - 3656 - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. 3657 - symxfrm="\\1 $ac_symprfx\\2 \\2" 3658 - 3659 - # Write the raw and C identifiers. 3660 - if test "$lt_cv_nm_interface" = "MS dumpbin"; then 3661 - # Fake it for dumpbin and say T for any non-static function 3662 - # and D for any global variable. 3663 - # Also find C++ and __fastcall symbols from MSVC++, 3664 - # which start with @ or ?. 3665 - lt_cv_sys_global_symbol_pipe="$AWK ['"\ 3666 -" {last_section=section; section=\$ 3};"\ 3667 -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ 3668 -" \$ 0!~/External *\|/{next};"\ 3669 -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ 3670 -" {if(hide[section]) next};"\ 3671 -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ 3672 -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ 3673 -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ 3674 -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ 3675 -" ' prfx=^$ac_symprfx]" 3676 - else 3677 - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" 3678 - fi 3679 - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" 3680 - 3681 - # Check to see that the pipe works correctly. 3682 - pipe_works=no 3683 - 3684 - rm -f conftest* 3685 - cat > conftest.$ac_ext <<_LT_EOF 3686 -#ifdef __cplusplus 3687 -extern "C" { 3688 -#endif 3689 -char nm_test_var; 3690 -void nm_test_func(void); 3691 -void nm_test_func(void){} 3692 -#ifdef __cplusplus 3693 -} 3694 -#endif 3695 -int main(){nm_test_var='a';nm_test_func();return(0);} 3696 -_LT_EOF 3697 - 3698 - if AC_TRY_EVAL(ac_compile); then 3699 - # Now try to grab the symbols. 3700 - nlist=conftest.nm 3701 - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then 3702 - # Try sorting and uniquifying the output. 3703 - if sort "$nlist" | uniq > "$nlist"T; then 3704 - mv -f "$nlist"T "$nlist" 3705 - else 3706 - rm -f "$nlist"T 3707 - fi 3708 - 3709 - # Make sure that we snagged all the symbols we need. 3710 - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then 3711 - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then 3712 - cat <<_LT_EOF > conftest.$ac_ext 3713 -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 3714 -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 3715 -/* DATA imports from DLLs on WIN32 con't be const, because runtime 3716 - relocations are performed -- see ld's documentation on pseudo-relocs. */ 3717 -# define LT@&t@_DLSYM_CONST 3718 -#elif defined(__osf__) 3719 -/* This system does not cope well with relocations in const data. */ 3720 -# define LT@&t@_DLSYM_CONST 3721 -#else 3722 -# define LT@&t@_DLSYM_CONST const 3723 -#endif 3724 - 3725 -#ifdef __cplusplus 3726 -extern "C" { 3727 -#endif 3728 - 3729 -_LT_EOF 3730 - # Now generate the symbol file. 3731 - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' 3732 - 3733 - cat <<_LT_EOF >> conftest.$ac_ext 3734 - 3735 -/* The mapping between symbol names and symbols. */ 3736 -LT@&t@_DLSYM_CONST struct { 3737 - const char *name; 3738 - void *address; 3739 -} 3740 -lt__PROGRAM__LTX_preloaded_symbols[[]] = 3741 -{ 3742 - { "@PROGRAM@", (void *) 0 }, 3743 -_LT_EOF 3744 - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext 3745 - cat <<\_LT_EOF >> conftest.$ac_ext 3746 - {0, (void *) 0} 3747 -}; 3748 - 3749 -/* This works around a problem in FreeBSD linker */ 3750 -#ifdef FREEBSD_WORKAROUND 3751 -static const void *lt_preloaded_setup() { 3752 - return lt__PROGRAM__LTX_preloaded_symbols; 3753 -} 3754 -#endif 3755 - 3756 -#ifdef __cplusplus 3757 -} 3758 -#endif 3759 -_LT_EOF 3760 - # Now try linking the two files. 3761 - mv conftest.$ac_objext conftstm.$ac_objext 3762 - lt_globsym_save_LIBS=$LIBS 3763 - lt_globsym_save_CFLAGS=$CFLAGS 3764 - LIBS="conftstm.$ac_objext" 3765 - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" 3766 - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then 3767 - pipe_works=yes 3768 - fi 3769 - LIBS=$lt_globsym_save_LIBS 3770 - CFLAGS=$lt_globsym_save_CFLAGS 3771 - else 3772 - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD 3773 - fi 3774 - else 3775 - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD 3776 - fi 3777 - else 3778 - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD 3779 - fi 3780 - else 3781 - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD 3782 - cat conftest.$ac_ext >&5 3783 - fi 3784 - rm -rf conftest* conftst* 3785 - 3786 - # Do not use the global_symbol_pipe unless it works. 3787 - if test "$pipe_works" = yes; then 3788 - break 3789 - else 3790 - lt_cv_sys_global_symbol_pipe= 3791 - fi 3792 -done 3793 -]) 3794 -if test -z "$lt_cv_sys_global_symbol_pipe"; then 3795 - lt_cv_sys_global_symbol_to_cdecl= 3796 -fi 3797 -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then 3798 - AC_MSG_RESULT(failed) 3799 -else 3800 - AC_MSG_RESULT(ok) 3801 -fi 3802 - 3803 -# Response file support. 3804 -if test "$lt_cv_nm_interface" = "MS dumpbin"; then 3805 - nm_file_list_spec='@' 3806 -elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then 3807 - nm_file_list_spec='@' 3808 -fi 3809 - 3810 -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], 3811 - [Take the output of nm and produce a listing of raw symbols and C names]) 3812 -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], 3813 - [Transform the output of nm in a proper C declaration]) 3814 -_LT_DECL([global_symbol_to_c_name_address], 3815 - [lt_cv_sys_global_symbol_to_c_name_address], [1], 3816 - [Transform the output of nm in a C name address pair]) 3817 -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], 3818 - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], 3819 - [Transform the output of nm in a C name address pair when lib prefix is needed]) 3820 -_LT_DECL([], [nm_file_list_spec], [1], 3821 - [Specify filename containing input files for $NM]) 3822 -]) # _LT_CMD_GLOBAL_SYMBOLS 3823 - 3824 - 3825 -# _LT_COMPILER_PIC([TAGNAME]) 3826 -# --------------------------- 3827 -m4_defun([_LT_COMPILER_PIC], 3828 -[m4_require([_LT_TAG_COMPILER])dnl 3829 -_LT_TAGVAR(lt_prog_compiler_wl, $1)= 3830 -_LT_TAGVAR(lt_prog_compiler_pic, $1)= 3831 -_LT_TAGVAR(lt_prog_compiler_static, $1)= 3832 - 3833 -m4_if([$1], [CXX], [ 3834 - # C++ specific cases for pic, static, wl, etc. 3835 - if test "$GXX" = yes; then 3836 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 3837 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' 3838 - 3839 - case $host_os in 3840 - aix*) 3841 - # All AIX code is PIC. 3842 - if test "$host_cpu" = ia64; then 3843 - # AIX 5 now supports IA64 processor 3844 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 3845 - fi 3846 - ;; 3847 - 3848 - amigaos*) 3849 - case $host_cpu in 3850 - powerpc) 3851 - # see comment about AmigaOS4 .so support 3852 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' 3853 - ;; 3854 - m68k) 3855 - # FIXME: we need at least 68020 code to build shared libraries, but 3856 - # adding the `-m68020' flag to GCC prevents building anything better, 3857 - # like `-m68040'. 3858 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' 3859 - ;; 3860 - esac 3861 - ;; 3862 - 3863 - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) 3864 - # PIC is the default for these OSes. 3865 - ;; 3866 - mingw* | cygwin* | os2* | pw32* | cegcc*) 3867 - # This hack is so that the source file can tell whether it is being 3868 - # built for inclusion in a dll (and should export symbols for example). 3869 - # Although the cygwin gcc ignores -fPIC, still need this for old-style 3870 - # (--disable-auto-import) libraries 3871 - m4_if([$1], [GCJ], [], 3872 - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) 3873 - ;; 3874 - darwin* | rhapsody*) 3875 - # PIC is the default on this platform 3876 - # Common symbols not allowed in MH_DYLIB files 3877 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' 3878 - ;; 3879 - *djgpp*) 3880 - # DJGPP does not support shared libraries at all 3881 - _LT_TAGVAR(lt_prog_compiler_pic, $1)= 3882 - ;; 3883 - haiku*) 3884 - # PIC is the default for Haiku. 3885 - # The "-static" flag exists, but is broken. 3886 - _LT_TAGVAR(lt_prog_compiler_static, $1)= 3887 - ;; 3888 - interix[[3-9]]*) 3889 - # Interix 3.x gcc -fpic/-fPIC options generate broken code. 3890 - # Instead, we relocate shared libraries at runtime. 3891 - ;; 3892 - sysv4*MP*) 3893 - if test -d /usr/nec; then 3894 - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic 3895 - fi 3896 - ;; 3897 - hpux*) 3898 - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit 3899 - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag 3900 - # sets the default TLS model and affects inlining. 3901 - case $host_cpu in 3902 - hppa*64*) 3903 - ;; 3904 - *) 3905 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' 3906 - ;; 3907 - esac 3908 - ;; 3909 - *qnx* | *nto*) 3910 - # QNX uses GNU C++, but need to define -shared option too, otherwise 3911 - # it will coredump. 3912 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' 3913 - ;; 3914 - *) 3915 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' 3916 - ;; 3917 - esac 3918 - else 3919 - case $host_os in 3920 - aix[[4-9]]*) 3921 - # All AIX code is PIC. 3922 - if test "$host_cpu" = ia64; then 3923 - # AIX 5 now supports IA64 processor 3924 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 3925 - else 3926 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' 3927 - fi 3928 - ;; 3929 - chorus*) 3930 - case $cc_basename in 3931 - cxch68*) 3932 - # Green Hills C++ Compiler 3933 - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" 3934 - ;; 3935 - esac 3936 - ;; 3937 - mingw* | cygwin* | os2* | pw32* | cegcc*) 3938 - # This hack is so that the source file can tell whether it is being 3939 - # built for inclusion in a dll (and should export symbols for example). 3940 - m4_if([$1], [GCJ], [], 3941 - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) 3942 - ;; 3943 - dgux*) 3944 - case $cc_basename in 3945 - ec++*) 3946 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 3947 - ;; 3948 - ghcx*) 3949 - # Green Hills C++ Compiler 3950 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' 3951 - ;; 3952 - *) 3953 - ;; 3954 - esac 3955 - ;; 3956 - freebsd* | dragonfly*) 3957 - # FreeBSD uses GNU C++ 3958 - ;; 3959 - hpux9* | hpux10* | hpux11*) 3960 - case $cc_basename in 3961 - CC*) 3962 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 3963 - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' 3964 - if test "$host_cpu" != ia64; then 3965 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' 3966 - fi 3967 - ;; 3968 - aCC*) 3969 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 3970 - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' 3971 - case $host_cpu in 3972 - hppa*64*|ia64*) 3973 - # +Z the default 3974 - ;; 3975 - *) 3976 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' 3977 - ;; 3978 - esac 3979 - ;; 3980 - *) 3981 - ;; 3982 - esac 3983 - ;; 3984 - interix*) 3985 - # This is c89, which is MS Visual C++ (no shared libs) 3986 - # Anyone wants to do a port? 3987 - ;; 3988 - irix5* | irix6* | nonstopux*) 3989 - case $cc_basename in 3990 - CC*) 3991 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 3992 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' 3993 - # CC pic flag -KPIC is the default. 3994 - ;; 3995 - *) 3996 - ;; 3997 - esac 3998 - ;; 3999 - linux* | k*bsd*-gnu | kopensolaris*-gnu) 4000 - case $cc_basename in 4001 - KCC*) 4002 - # KAI C++ Compiler 4003 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' 4004 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' 4005 - ;; 4006 - ecpc* ) 4007 - # old Intel C++ for x86_64 which still supported -KPIC. 4008 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4009 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4010 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' 4011 - ;; 4012 - icpc* ) 4013 - # Intel C++, used to be incompatible with GCC. 4014 - # ICC 10 doesn't accept -KPIC any more. 4015 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4016 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' 4017 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' 4018 - ;; 4019 - pgCC* | pgcpp*) 4020 - # Portland Group C++ compiler 4021 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4022 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' 4023 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4024 - ;; 4025 - cxx*) 4026 - # Compaq C++ 4027 - # Make sure the PIC flag is empty. It appears that all Alpha 4028 - # Linux and Compaq Tru64 Unix objects are PIC. 4029 - _LT_TAGVAR(lt_prog_compiler_pic, $1)= 4030 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' 4031 - ;; 4032 - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) 4033 - # IBM XL 8.0, 9.0 on PPC and BlueGene 4034 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4035 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' 4036 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' 4037 - ;; 4038 - *) 4039 - case `$CC -V 2>&1 | sed 5q` in 4040 - *Sun\ C*) 4041 - # Sun C++ 5.9 4042 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4043 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4044 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' 4045 - ;; 4046 - esac 4047 - ;; 4048 - esac 4049 - ;; 4050 - lynxos*) 4051 - ;; 4052 - m88k*) 4053 - ;; 4054 - mvs*) 4055 - case $cc_basename in 4056 - cxx*) 4057 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' 4058 - ;; 4059 - *) 4060 - ;; 4061 - esac 4062 - ;; 4063 - netbsd*) 4064 - ;; 4065 - *qnx* | *nto*) 4066 - # QNX uses GNU C++, but need to define -shared option too, otherwise 4067 - # it will coredump. 4068 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' 4069 - ;; 4070 - osf3* | osf4* | osf5*) 4071 - case $cc_basename in 4072 - KCC*) 4073 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' 4074 - ;; 4075 - RCC*) 4076 - # Rational C++ 2.4.1 4077 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' 4078 - ;; 4079 - cxx*) 4080 - # Digital/Compaq C++ 4081 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4082 - # Make sure the PIC flag is empty. It appears that all Alpha 4083 - # Linux and Compaq Tru64 Unix objects are PIC. 4084 - _LT_TAGVAR(lt_prog_compiler_pic, $1)= 4085 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' 4086 - ;; 4087 - *) 4088 - ;; 4089 - esac 4090 - ;; 4091 - psos*) 4092 - ;; 4093 - solaris*) 4094 - case $cc_basename in 4095 - CC* | sunCC*) 4096 - # Sun C++ 4.2, 5.x and Centerline C++ 4097 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4098 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4099 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' 4100 - ;; 4101 - gcx*) 4102 - # Green Hills C++ Compiler 4103 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' 4104 - ;; 4105 - *) 4106 - ;; 4107 - esac 4108 - ;; 4109 - sunos4*) 4110 - case $cc_basename in 4111 - CC*) 4112 - # Sun C++ 4.x 4113 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' 4114 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4115 - ;; 4116 - lcc*) 4117 - # Lucid 4118 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' 4119 - ;; 4120 - *) 4121 - ;; 4122 - esac 4123 - ;; 4124 - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) 4125 - case $cc_basename in 4126 - CC*) 4127 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4128 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4129 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4130 - ;; 4131 - esac 4132 - ;; 4133 - tandem*) 4134 - case $cc_basename in 4135 - NCC*) 4136 - # NonStop-UX NCC 3.20 4137 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4138 - ;; 4139 - *) 4140 - ;; 4141 - esac 4142 - ;; 4143 - vxworks*) 4144 - ;; 4145 - *) 4146 - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no 4147 - ;; 4148 - esac 4149 - fi 4150 -], 4151 -[ 4152 - if test "$GCC" = yes; then 4153 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4154 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' 4155 - 4156 - case $host_os in 4157 - aix*) 4158 - # All AIX code is PIC. 4159 - if test "$host_cpu" = ia64; then 4160 - # AIX 5 now supports IA64 processor 4161 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4162 - fi 4163 - ;; 4164 - 4165 - amigaos*) 4166 - case $host_cpu in 4167 - powerpc) 4168 - # see comment about AmigaOS4 .so support 4169 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' 4170 - ;; 4171 - m68k) 4172 - # FIXME: we need at least 68020 code to build shared libraries, but 4173 - # adding the `-m68020' flag to GCC prevents building anything better, 4174 - # like `-m68040'. 4175 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' 4176 - ;; 4177 - esac 4178 - ;; 4179 - 4180 - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) 4181 - # PIC is the default for these OSes. 4182 - ;; 4183 - 4184 - mingw* | cygwin* | pw32* | os2* | cegcc*) 4185 - # This hack is so that the source file can tell whether it is being 4186 - # built for inclusion in a dll (and should export symbols for example). 4187 - # Although the cygwin gcc ignores -fPIC, still need this for old-style 4188 - # (--disable-auto-import) libraries 4189 - m4_if([$1], [GCJ], [], 4190 - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) 4191 - ;; 4192 - 4193 - darwin* | rhapsody*) 4194 - # PIC is the default on this platform 4195 - # Common symbols not allowed in MH_DYLIB files 4196 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' 4197 - ;; 4198 - 4199 - haiku*) 4200 - # PIC is the default for Haiku. 4201 - # The "-static" flag exists, but is broken. 4202 - _LT_TAGVAR(lt_prog_compiler_static, $1)= 4203 - ;; 4204 - 4205 - hpux*) 4206 - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit 4207 - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag 4208 - # sets the default TLS model and affects inlining. 4209 - case $host_cpu in 4210 - hppa*64*) 4211 - # +Z the default 4212 - ;; 4213 - *) 4214 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' 4215 - ;; 4216 - esac 4217 - ;; 4218 - 4219 - interix[[3-9]]*) 4220 - # Interix 3.x gcc -fpic/-fPIC options generate broken code. 4221 - # Instead, we relocate shared libraries at runtime. 4222 - ;; 4223 - 4224 - msdosdjgpp*) 4225 - # Just because we use GCC doesn't mean we suddenly get shared libraries 4226 - # on systems that don't support them. 4227 - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no 4228 - enable_shared=no 4229 - ;; 4230 - 4231 - *nto* | *qnx*) 4232 - # QNX uses GNU C++, but need to define -shared option too, otherwise 4233 - # it will coredump. 4234 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' 4235 - ;; 4236 - 4237 - sysv4*MP*) 4238 - if test -d /usr/nec; then 4239 - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic 4240 - fi 4241 - ;; 4242 - 4243 - *) 4244 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' 4245 - ;; 4246 - esac 4247 - 4248 - case $cc_basename in 4249 - nvcc*) # Cuda Compiler Driver 2.2 4250 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' 4251 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' 4252 - ;; 4253 - esac 4254 - else 4255 - # PORTME Check for flag to pass linker flags through the system compiler. 4256 - case $host_os in 4257 - aix*) 4258 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4259 - if test "$host_cpu" = ia64; then 4260 - # AIX 5 now supports IA64 processor 4261 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4262 - else 4263 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' 4264 - fi 4265 - ;; 4266 - 4267 - mingw* | cygwin* | pw32* | os2* | cegcc*) 4268 - # This hack is so that the source file can tell whether it is being 4269 - # built for inclusion in a dll (and should export symbols for example). 4270 - m4_if([$1], [GCJ], [], 4271 - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) 4272 - ;; 4273 - 4274 - hpux9* | hpux10* | hpux11*) 4275 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4276 - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but 4277 - # not for PA HP-UX. 4278 - case $host_cpu in 4279 - hppa*64*|ia64*) 4280 - # +Z the default 4281 - ;; 4282 - *) 4283 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' 4284 - ;; 4285 - esac 4286 - # Is there a better lt_prog_compiler_static that works with the bundled CC? 4287 - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' 4288 - ;; 4289 - 4290 - irix5* | irix6* | nonstopux*) 4291 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4292 - # PIC (with -KPIC) is the default. 4293 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' 4294 - ;; 4295 - 4296 - linux* | k*bsd*-gnu | kopensolaris*-gnu) 4297 - case $cc_basename in 4298 - # old Intel for x86_64 which still supported -KPIC. 4299 - ecc*) 4300 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4301 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4302 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' 4303 - ;; 4304 - # icc used to be incompatible with GCC. 4305 - # ICC 10 doesn't accept -KPIC any more. 4306 - icc* | ifort*) 4307 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4308 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' 4309 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' 4310 - ;; 4311 - # Lahey Fortran 8.1. 4312 - lf95*) 4313 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4314 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' 4315 - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' 4316 - ;; 4317 - nagfor*) 4318 - # NAG Fortran compiler 4319 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' 4320 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' 4321 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4322 - ;; 4323 - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) 4324 - # Portland Group compilers (*not* the Pentium gcc compiler, 4325 - # which looks to be a dead project) 4326 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4327 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' 4328 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4329 - ;; 4330 - ccc*) 4331 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4332 - # All Alpha code is PIC. 4333 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' 4334 - ;; 4335 - xl* | bgxl* | bgf* | mpixl*) 4336 - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene 4337 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4338 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' 4339 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' 4340 - ;; 4341 - *) 4342 - case `$CC -V 2>&1 | sed 5q` in 4343 - *Sun\ F* | *Sun*Fortran*) 4344 - # Sun Fortran 8.3 passes all unrecognized flags to the linker 4345 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4346 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4347 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' 4348 - ;; 4349 - *Sun\ C*) 4350 - # Sun C 5.9 4351 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4352 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4353 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4354 - ;; 4355 - esac 4356 - ;; 4357 - esac 4358 - ;; 4359 - 4360 - newsos6) 4361 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4362 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4363 - ;; 4364 - 4365 - *nto* | *qnx*) 4366 - # QNX uses GNU C++, but need to define -shared option too, otherwise 4367 - # it will coredump. 4368 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' 4369 - ;; 4370 - 4371 - osf3* | osf4* | osf5*) 4372 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4373 - # All OSF/1 code is PIC. 4374 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' 4375 - ;; 4376 - 4377 - rdos*) 4378 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' 4379 - ;; 4380 - 4381 - solaris*) 4382 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4383 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4384 - case $cc_basename in 4385 - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) 4386 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; 4387 - *) 4388 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; 4389 - esac 4390 - ;; 4391 - 4392 - sunos4*) 4393 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' 4394 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' 4395 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4396 - ;; 4397 - 4398 - sysv4 | sysv4.2uw2* | sysv4.3*) 4399 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4400 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4401 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4402 - ;; 4403 - 4404 - sysv4*MP*) 4405 - if test -d /usr/nec ;then 4406 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' 4407 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4408 - fi 4409 - ;; 4410 - 4411 - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) 4412 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4413 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' 4414 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4415 - ;; 4416 - 4417 - unicos*) 4418 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' 4419 - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no 4420 - ;; 4421 - 4422 - uts4*) 4423 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' 4424 - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' 4425 - ;; 4426 - 4427 - *) 4428 - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no 4429 - ;; 4430 - esac 4431 - fi 4432 -]) 4433 -case $host_os in 4434 - # For platforms which do not support PIC, -DPIC is meaningless: 4435 - *djgpp*) 4436 - _LT_TAGVAR(lt_prog_compiler_pic, $1)= 4437 - ;; 4438 - *) 4439 - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" 4440 - ;; 4441 -esac 4442 - 4443 -AC_CACHE_CHECK([for $compiler option to produce PIC], 4444 - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], 4445 - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) 4446 -_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) 4447 - 4448 -# 4449 -# Check to make sure the PIC flag actually works. 4450 -# 4451 -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then 4452 - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], 4453 - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], 4454 - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], 4455 - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in 4456 - "" | " "*) ;; 4457 - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; 4458 - esac], 4459 - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= 4460 - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) 4461 -fi 4462 -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], 4463 - [Additional compiler flags for building library objects]) 4464 - 4465 -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], 4466 - [How to pass a linker flag through the compiler]) 4467 -# 4468 -# Check to make sure the static flag actually works. 4469 -# 4470 -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" 4471 -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], 4472 - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), 4473 - $lt_tmp_static_flag, 4474 - [], 4475 - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) 4476 -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], 4477 - [Compiler flag to prevent dynamic linking]) 4478 -])# _LT_COMPILER_PIC 4479 - 4480 - 4481 -# _LT_LINKER_SHLIBS([TAGNAME]) 4482 -# ---------------------------- 4483 -# See if the linker supports building shared libraries. 4484 -m4_defun([_LT_LINKER_SHLIBS], 4485 -[AC_REQUIRE([LT_PATH_LD])dnl 4486 -AC_REQUIRE([LT_PATH_NM])dnl 4487 -m4_require([_LT_PATH_MANIFEST_TOOL])dnl 4488 -m4_require([_LT_FILEUTILS_DEFAULTS])dnl 4489 -m4_require([_LT_DECL_EGREP])dnl 4490 -m4_require([_LT_DECL_SED])dnl 4491 -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl 4492 -m4_require([_LT_TAG_COMPILER])dnl 4493 -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) 4494 -m4_if([$1], [CXX], [ 4495 - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' 4496 - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] 4497 - case $host_os in 4498 - aix[[4-9]]*) 4499 - # If we're using GNU nm, then we don't want the "-C" option. 4500 - # -C means demangle to AIX nm, but means don't demangle with GNU nm 4501 - # Also, AIX nm treats weak defined symbols like other global defined 4502 - # symbols, whereas GNU nm marks them as "W". 4503 - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then 4504 - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' 4505 - else 4506 - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' 4507 - fi 4508 - ;; 4509 - pw32*) 4510 - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" 4511 - ;; 4512 - cygwin* | mingw* | cegcc*) 4513 - case $cc_basename in 4514 - cl*) ;; 4515 - *) 4516 - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' 4517 - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] 4518 - ;; 4519 - esac 4520 - ;; 4521 - *) 4522 - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' 4523 - ;; 4524 - esac 4525 -], [ 4526 - runpath_var= 4527 - _LT_TAGVAR(allow_undefined_flag, $1)= 4528 - _LT_TAGVAR(always_export_symbols, $1)=no 4529 - _LT_TAGVAR(archive_cmds, $1)= 4530 - _LT_TAGVAR(archive_expsym_cmds, $1)= 4531 - _LT_TAGVAR(compiler_needs_object, $1)=no 4532 - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no 4533 - _LT_TAGVAR(export_dynamic_flag_spec, $1)= 4534 - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' 4535 - _LT_TAGVAR(hardcode_automatic, $1)=no 4536 - _LT_TAGVAR(hardcode_direct, $1)=no 4537 - _LT_TAGVAR(hardcode_direct_absolute, $1)=no 4538 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= 4539 - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= 4540 - _LT_TAGVAR(hardcode_libdir_separator, $1)= 4541 - _LT_TAGVAR(hardcode_minus_L, $1)=no 4542 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported 4543 - _LT_TAGVAR(inherit_rpath, $1)=no 4544 - _LT_TAGVAR(link_all_deplibs, $1)=unknown 4545 - _LT_TAGVAR(module_cmds, $1)= 4546 - _LT_TAGVAR(module_expsym_cmds, $1)= 4547 - _LT_TAGVAR(old_archive_from_new_cmds, $1)= 4548 - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= 4549 - _LT_TAGVAR(thread_safe_flag_spec, $1)= 4550 - _LT_TAGVAR(whole_archive_flag_spec, $1)= 4551 - # include_expsyms should be a list of space-separated symbols to be *always* 4552 - # included in the symbol list 4553 - _LT_TAGVAR(include_expsyms, $1)= 4554 - # exclude_expsyms can be an extended regexp of symbols to exclude 4555 - # it will be wrapped by ` (' and `)$', so one must not match beginning or 4556 - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', 4557 - # as well as any symbol that contains `d'. 4558 - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] 4559 - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out 4560 - # platforms (ab)use it in PIC code, but their linkers get confused if 4561 - # the symbol is explicitly referenced. Since portable code cannot 4562 - # rely on this symbol name, it's probably fine to never include it in 4563 - # preloaded symbol tables. 4564 - # Exclude shared library initialization/finalization symbols. 4565 -dnl Note also adjust exclude_expsyms for C++ above. 4566 - extract_expsyms_cmds= 4567 - 4568 - case $host_os in 4569 - cygwin* | mingw* | pw32* | cegcc*) 4570 - # FIXME: the MSVC++ port hasn't been tested in a loooong time 4571 - # When not using gcc, we currently assume that we are using 4572 - # Microsoft Visual C++. 4573 - if test "$GCC" != yes; then 4574 - with_gnu_ld=no 4575 - fi 4576 - ;; 4577 - interix*) 4578 - # we just hope/assume this is gcc and not c89 (= MSVC++) 4579 - with_gnu_ld=yes 4580 - ;; 4581 - openbsd*) 4582 - with_gnu_ld=no 4583 - ;; 4584 - esac 4585 - 4586 - _LT_TAGVAR(ld_shlibs, $1)=yes 4587 - 4588 - # On some targets, GNU ld is compatible enough with the native linker 4589 - # that we're better off using the native interface for both. 4590 - lt_use_gnu_ld_interface=no 4591 - if test "$with_gnu_ld" = yes; then 4592 - case $host_os in 4593 - aix*) 4594 - # The AIX port of GNU ld has always aspired to compatibility 4595 - # with the native linker. However, as the warning in the GNU ld 4596 - # block says, versions before 2.19.5* couldn't really create working 4597 - # shared libraries, regardless of the interface used. 4598 - case `$LD -v 2>&1` in 4599 - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; 4600 - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; 4601 - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; 4602 - *) 4603 - lt_use_gnu_ld_interface=yes 4604 - ;; 4605 - esac 4606 - ;; 4607 - *) 4608 - lt_use_gnu_ld_interface=yes 4609 - ;; 4610 - esac 4611 - fi 4612 - 4613 - if test "$lt_use_gnu_ld_interface" = yes; then 4614 - # If archive_cmds runs LD, not CC, wlarc should be empty 4615 - wlarc='${wl}' 4616 - 4617 - # Set some defaults for GNU ld with shared library support. These 4618 - # are reset later if shared libraries are not supported. Putting them 4619 - # here allows them to be overridden if necessary. 4620 - runpath_var=LD_RUN_PATH 4621 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 4622 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' 4623 - # ancient GNU ld didn't support --whole-archive et. al. 4624 - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then 4625 - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' 4626 - else 4627 - _LT_TAGVAR(whole_archive_flag_spec, $1)= 4628 - fi 4629 - supports_anon_versioning=no 4630 - case `$LD -v 2>&1` in 4631 - *GNU\ gold*) supports_anon_versioning=yes ;; 4632 - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 4633 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... 4634 - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... 4635 - *\ 2.11.*) ;; # other 2.11 versions 4636 - *) supports_anon_versioning=yes ;; 4637 - esac 4638 - 4639 - # See if GNU ld supports shared libraries. 4640 - case $host_os in 4641 - aix[[3-9]]*) 4642 - # On AIX/PPC, the GNU linker is very broken 4643 - if test "$host_cpu" != ia64; then 4644 - _LT_TAGVAR(ld_shlibs, $1)=no 4645 - cat <<_LT_EOF 1>&2 4646 - 4647 -*** Warning: the GNU linker, at least up to release 2.19, is reported 4648 -*** to be unable to reliably create shared libraries on AIX. 4649 -*** Therefore, libtool is disabling shared libraries support. If you 4650 -*** really care for shared libraries, you may want to install binutils 4651 -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. 4652 -*** You will then need to restart the configuration process. 4653 - 4654 -_LT_EOF 4655 - fi 4656 - ;; 4657 - 4658 - amigaos*) 4659 - case $host_cpu in 4660 - powerpc) 4661 - # see comment about AmigaOS4 .so support 4662 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 4663 - _LT_TAGVAR(archive_expsym_cmds, $1)='' 4664 - ;; 4665 - m68k) 4666 - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' 4667 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' 4668 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 4669 - ;; 4670 - esac 4671 - ;; 4672 - 4673 - beos*) 4674 - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then 4675 - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported 4676 - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc 4677 - # support --undefined. This deserves some investigation. FIXME 4678 - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 4679 - else 4680 - _LT_TAGVAR(ld_shlibs, $1)=no 4681 - fi 4682 - ;; 4683 - 4684 - cygwin* | mingw* | pw32* | cegcc*) 4685 - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, 4686 - # as there is no search path for DLLs. 4687 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' 4688 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' 4689 - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported 4690 - _LT_TAGVAR(always_export_symbols, $1)=no 4691 - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes 4692 - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' 4693 - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] 4694 - 4695 - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then 4696 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' 4697 - # If the export-symbols file already is a .def file (1st line 4698 - # is EXPORTS), use it as is; otherwise, prepend... 4699 - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then 4700 - cp $export_symbols $output_objdir/$soname.def; 4701 - else 4702 - echo EXPORTS > $output_objdir/$soname.def; 4703 - cat $export_symbols >> $output_objdir/$soname.def; 4704 - fi~ 4705 - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' 4706 - else 4707 - _LT_TAGVAR(ld_shlibs, $1)=no 4708 - fi 4709 - ;; 4710 - 4711 - haiku*) 4712 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 4713 - _LT_TAGVAR(link_all_deplibs, $1)=yes 4714 - ;; 4715 - 4716 - interix[[3-9]]*) 4717 - _LT_TAGVAR(hardcode_direct, $1)=no 4718 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 4719 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' 4720 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' 4721 - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. 4722 - # Instead, shared libraries are loaded at an image base (0x10000000 by 4723 - # default) and relocated if they conflict, which is a slow very memory 4724 - # consuming and fragmenting process. To avoid this, we pick a random, 4725 - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link 4726 - # time. Moving up from 0x10000000 also allows more sbrk(2) space. 4727 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' 4728 - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' 4729 - ;; 4730 - 4731 - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) 4732 - tmp_diet=no 4733 - if test "$host_os" = linux-dietlibc; then 4734 - case $cc_basename in 4735 - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) 4736 - esac 4737 - fi 4738 - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ 4739 - && test "$tmp_diet" = no 4740 - then 4741 - tmp_addflag=' $pic_flag' 4742 - tmp_sharedflag='-shared' 4743 - case $cc_basename,$host_cpu in 4744 - pgcc*) # Portland Group C compiler 4745 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' 4746 - tmp_addflag=' $pic_flag' 4747 - ;; 4748 - pgf77* | pgf90* | pgf95* | pgfortran*) 4749 - # Portland Group f77 and f90 compilers 4750 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' 4751 - tmp_addflag=' $pic_flag -Mnomain' ;; 4752 - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 4753 - tmp_addflag=' -i_dynamic' ;; 4754 - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 4755 - tmp_addflag=' -i_dynamic -nofor_main' ;; 4756 - ifc* | ifort*) # Intel Fortran compiler 4757 - tmp_addflag=' -nofor_main' ;; 4758 - lf95*) # Lahey Fortran 8.1 4759 - _LT_TAGVAR(whole_archive_flag_spec, $1)= 4760 - tmp_sharedflag='--shared' ;; 4761 - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) 4762 - tmp_sharedflag='-qmkshrobj' 4763 - tmp_addflag= ;; 4764 - nvcc*) # Cuda Compiler Driver 2.2 4765 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' 4766 - _LT_TAGVAR(compiler_needs_object, $1)=yes 4767 - ;; 4768 - esac 4769 - case `$CC -V 2>&1 | sed 5q` in 4770 - *Sun\ C*) # Sun C 5.9 4771 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' 4772 - _LT_TAGVAR(compiler_needs_object, $1)=yes 4773 - tmp_sharedflag='-G' ;; 4774 - *Sun\ F*) # Sun Fortran 8.3 4775 - tmp_sharedflag='-G' ;; 4776 - esac 4777 - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 4778 - 4779 - if test "x$supports_anon_versioning" = xyes; then 4780 - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ 4781 - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ 4782 - echo "local: *; };" >> $output_objdir/$libname.ver~ 4783 - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' 4784 - fi 4785 - 4786 - case $cc_basename in 4787 - xlf* | bgf* | bgxlf* | mpixlf*) 4788 - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself 4789 - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' 4790 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= 4791 - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' 4792 - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' 4793 - if test "x$supports_anon_versioning" = xyes; then 4794 - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ 4795 - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ 4796 - echo "local: *; };" >> $output_objdir/$libname.ver~ 4797 - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' 4798 - fi 4799 - ;; 4800 - esac 4801 - else 4802 - _LT_TAGVAR(ld_shlibs, $1)=no 4803 - fi 4804 - ;; 4805 - 4806 - netbsd*) 4807 - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then 4808 - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' 4809 - wlarc= 4810 - else 4811 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 4812 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' 4813 - fi 4814 - ;; 4815 - 4816 - solaris*) 4817 - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then 4818 - _LT_TAGVAR(ld_shlibs, $1)=no 4819 - cat <<_LT_EOF 1>&2 4820 - 4821 -*** Warning: The releases 2.8.* of the GNU linker cannot reliably 4822 -*** create shared libraries on Solaris systems. Therefore, libtool 4823 -*** is disabling shared libraries support. We urge you to upgrade GNU 4824 -*** binutils to release 2.9.1 or newer. Another option is to modify 4825 -*** your PATH or compiler configuration so that the native linker is 4826 -*** used, and then restart. 4827 - 4828 -_LT_EOF 4829 - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then 4830 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 4831 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' 4832 - else 4833 - _LT_TAGVAR(ld_shlibs, $1)=no 4834 - fi 4835 - ;; 4836 - 4837 - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) 4838 - case `$LD -v 2>&1` in 4839 - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) 4840 - _LT_TAGVAR(ld_shlibs, $1)=no 4841 - cat <<_LT_EOF 1>&2 4842 - 4843 -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not 4844 -*** reliably create shared libraries on SCO systems. Therefore, libtool 4845 -*** is disabling shared libraries support. We urge you to upgrade GNU 4846 -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify 4847 -*** your PATH or compiler configuration so that the native linker is 4848 -*** used, and then restart. 4849 - 4850 -_LT_EOF 4851 - ;; 4852 - *) 4853 - # For security reasons, it is highly recommended that you always 4854 - # use absolute paths for naming shared libraries, and exclude the 4855 - # DT_RUNPATH tag from executables and libraries. But doing so 4856 - # requires that you compile everything twice, which is a pain. 4857 - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then 4858 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 4859 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 4860 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' 4861 - else 4862 - _LT_TAGVAR(ld_shlibs, $1)=no 4863 - fi 4864 - ;; 4865 - esac 4866 - ;; 4867 - 4868 - sunos4*) 4869 - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' 4870 - wlarc= 4871 - _LT_TAGVAR(hardcode_direct, $1)=yes 4872 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 4873 - ;; 4874 - 4875 - *) 4876 - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then 4877 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 4878 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' 4879 - else 4880 - _LT_TAGVAR(ld_shlibs, $1)=no 4881 - fi 4882 - ;; 4883 - esac 4884 - 4885 - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then 4886 - runpath_var= 4887 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= 4888 - _LT_TAGVAR(export_dynamic_flag_spec, $1)= 4889 - _LT_TAGVAR(whole_archive_flag_spec, $1)= 4890 - fi 4891 - else 4892 - # PORTME fill in a description of your system's linker (not GNU ld) 4893 - case $host_os in 4894 - aix3*) 4895 - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported 4896 - _LT_TAGVAR(always_export_symbols, $1)=yes 4897 - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' 4898 - # Note: this linker hardcodes the directories in LIBPATH if there 4899 - # are no directories specified by -L. 4900 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 4901 - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then 4902 - # Neither direct hardcoding nor static linking is supported with a 4903 - # broken collect2. 4904 - _LT_TAGVAR(hardcode_direct, $1)=unsupported 4905 - fi 4906 - ;; 4907 - 4908 - aix[[4-9]]*) 4909 - if test "$host_cpu" = ia64; then 4910 - # On IA64, the linker does run time linking by default, so we don't 4911 - # have to do anything special. 4912 - aix_use_runtimelinking=no 4913 - exp_sym_flag='-Bexport' 4914 - no_entry_flag="" 4915 - else 4916 - # If we're using GNU nm, then we don't want the "-C" option. 4917 - # -C means demangle to AIX nm, but means don't demangle with GNU nm 4918 - # Also, AIX nm treats weak defined symbols like other global 4919 - # defined symbols, whereas GNU nm marks them as "W". 4920 - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then 4921 - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' 4922 - else 4923 - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' 4924 - fi 4925 - aix_use_runtimelinking=no 4926 - 4927 - # Test if we are trying to use run time linking or normal 4928 - # AIX style linking. If -brtl is somewhere in LDFLAGS, we 4929 - # need to do runtime linking. 4930 - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) 4931 - for ld_flag in $LDFLAGS; do 4932 - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then 4933 - aix_use_runtimelinking=yes 4934 - break 4935 - fi 4936 - done 4937 - ;; 4938 - esac 4939 - 4940 - exp_sym_flag='-bexport' 4941 - no_entry_flag='-bnoentry' 4942 - fi 4943 - 4944 - # When large executables or shared objects are built, AIX ld can 4945 - # have problems creating the table of contents. If linking a library 4946 - # or program results in "error TOC overflow" add -mminimal-toc to 4947 - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not 4948 - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. 4949 - 4950 - _LT_TAGVAR(archive_cmds, $1)='' 4951 - _LT_TAGVAR(hardcode_direct, $1)=yes 4952 - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes 4953 - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' 4954 - _LT_TAGVAR(link_all_deplibs, $1)=yes 4955 - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' 4956 - 4957 - if test "$GCC" = yes; then 4958 - case $host_os in aix4.[[012]]|aix4.[[012]].*) 4959 - # We only want to do this on AIX 4.2 and lower, the check 4960 - # below for broken collect2 doesn't work under 4.3+ 4961 - collect2name=`${CC} -print-prog-name=collect2` 4962 - if test -f "$collect2name" && 4963 - strings "$collect2name" | $GREP resolve_lib_name >/dev/null 4964 - then 4965 - # We have reworked collect2 4966 - : 4967 - else 4968 - # We have old collect2 4969 - _LT_TAGVAR(hardcode_direct, $1)=unsupported 4970 - # It fails to find uninstalled libraries when the uninstalled 4971 - # path is not listed in the libpath. Setting hardcode_minus_L 4972 - # to unsupported forces relinking 4973 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 4974 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' 4975 - _LT_TAGVAR(hardcode_libdir_separator, $1)= 4976 - fi 4977 - ;; 4978 - esac 4979 - shared_flag='-shared' 4980 - if test "$aix_use_runtimelinking" = yes; then 4981 - shared_flag="$shared_flag "'${wl}-G' 4982 - fi 4983 - else 4984 - # not using gcc 4985 - if test "$host_cpu" = ia64; then 4986 - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release 4987 - # chokes on -Wl,-G. The following line is correct: 4988 - shared_flag='-G' 4989 - else 4990 - if test "$aix_use_runtimelinking" = yes; then 4991 - shared_flag='${wl}-G' 4992 - else 4993 - shared_flag='${wl}-bM:SRE' 4994 - fi 4995 - fi 4996 - fi 4997 - 4998 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' 4999 - # It seems that -bexpall does not export symbols beginning with 5000 - # underscore (_), so it is better to generate a list of symbols to export. 5001 - _LT_TAGVAR(always_export_symbols, $1)=yes 5002 - if test "$aix_use_runtimelinking" = yes; then 5003 - # Warning - without using the other runtime loading flags (-brtl), 5004 - # -berok will link without error, but may produce a broken library. 5005 - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' 5006 - # Determine the default libpath from the value encoded in an 5007 - # empty executable. 5008 - _LT_SYS_MODULE_PATH_AIX([$1]) 5009 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" 5010 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" 5011 - else 5012 - if test "$host_cpu" = ia64; then 5013 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' 5014 - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" 5015 - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" 5016 - else 5017 - # Determine the default libpath from the value encoded in an 5018 - # empty executable. 5019 - _LT_SYS_MODULE_PATH_AIX([$1]) 5020 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" 5021 - # Warning - without using the other run time loading flags, 5022 - # -berok will link without error, but may produce a broken library. 5023 - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' 5024 - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' 5025 - if test "$with_gnu_ld" = yes; then 5026 - # We only use this code for GNU lds that support --whole-archive. 5027 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' 5028 - else 5029 - # Exported symbols can be pulled into shared objects from archives 5030 - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' 5031 - fi 5032 - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes 5033 - # This is similar to how AIX traditionally builds its shared libraries. 5034 - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' 5035 - fi 5036 - fi 5037 - ;; 5038 - 5039 - amigaos*) 5040 - case $host_cpu in 5041 - powerpc) 5042 - # see comment about AmigaOS4 .so support 5043 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 5044 - _LT_TAGVAR(archive_expsym_cmds, $1)='' 5045 - ;; 5046 - m68k) 5047 - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' 5048 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' 5049 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 5050 - ;; 5051 - esac 5052 - ;; 5053 - 5054 - bsdi[[45]]*) 5055 - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic 5056 - ;; 5057 - 5058 - cygwin* | mingw* | pw32* | cegcc*) 5059 - # When not using gcc, we currently assume that we are using 5060 - # Microsoft Visual C++. 5061 - # hardcode_libdir_flag_spec is actually meaningless, as there is 5062 - # no search path for DLLs. 5063 - case $cc_basename in 5064 - cl*) 5065 - # Native MSVC 5066 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' 5067 - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported 5068 - _LT_TAGVAR(always_export_symbols, $1)=yes 5069 - _LT_TAGVAR(file_list_spec, $1)='@' 5070 - # Tell ltmain to make .lib files, not .a files. 5071 - libext=lib 5072 - # Tell ltmain to make .dll files, not .so files. 5073 - shrext_cmds=".dll" 5074 - # FIXME: Setting linknames here is a bad hack. 5075 - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' 5076 - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then 5077 - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; 5078 - else 5079 - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; 5080 - fi~ 5081 - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ 5082 - linknames=' 5083 - # The linker will not automatically build a static lib if we build a DLL. 5084 - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' 5085 - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes 5086 - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' 5087 - # Don't use ranlib 5088 - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' 5089 - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ 5090 - lt_tool_outputfile="@TOOL_OUTPUT@"~ 5091 - case $lt_outputfile in 5092 - *.exe|*.EXE) ;; 5093 - *) 5094 - lt_outputfile="$lt_outputfile.exe" 5095 - lt_tool_outputfile="$lt_tool_outputfile.exe" 5096 - ;; 5097 - esac~ 5098 - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then 5099 - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; 5100 - $RM "$lt_outputfile.manifest"; 5101 - fi' 5102 - ;; 5103 - *) 5104 - # Assume MSVC wrapper 5105 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' 5106 - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported 5107 - # Tell ltmain to make .lib files, not .a files. 5108 - libext=lib 5109 - # Tell ltmain to make .dll files, not .so files. 5110 - shrext_cmds=".dll" 5111 - # FIXME: Setting linknames here is a bad hack. 5112 - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' 5113 - # The linker will automatically build a .lib file if we build a DLL. 5114 - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' 5115 - # FIXME: Should let the user specify the lib program. 5116 - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' 5117 - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes 5118 - ;; 5119 - esac 5120 - ;; 5121 - 5122 - darwin* | rhapsody*) 5123 - _LT_DARWIN_LINKER_FEATURES($1) 5124 - ;; 5125 - 5126 - dgux*) 5127 - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' 5128 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' 5129 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5130 - ;; 5131 - 5132 - freebsd1*) 5133 - _LT_TAGVAR(ld_shlibs, $1)=no 5134 - ;; 5135 - 5136 - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor 5137 - # support. Future versions do this automatically, but an explicit c++rt0.o 5138 - # does not break anything, and helps significantly (at the cost of a little 5139 - # extra space). 5140 - freebsd2.2*) 5141 - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' 5142 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' 5143 - _LT_TAGVAR(hardcode_direct, $1)=yes 5144 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5145 - ;; 5146 - 5147 - # Unfortunately, older versions of FreeBSD 2 do not have this feature. 5148 - freebsd2*) 5149 - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' 5150 - _LT_TAGVAR(hardcode_direct, $1)=yes 5151 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 5152 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5153 - ;; 5154 - 5155 - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. 5156 - freebsd* | dragonfly*) 5157 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' 5158 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' 5159 - _LT_TAGVAR(hardcode_direct, $1)=yes 5160 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5161 - ;; 5162 - 5163 - hpux9*) 5164 - if test "$GCC" = yes; then 5165 - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' 5166 - else 5167 - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' 5168 - fi 5169 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' 5170 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 5171 - _LT_TAGVAR(hardcode_direct, $1)=yes 5172 - 5173 - # hardcode_minus_L: Not really in the search PATH, 5174 - # but as the default location of the library. 5175 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 5176 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' 5177 - ;; 5178 - 5179 - hpux10*) 5180 - if test "$GCC" = yes && test "$with_gnu_ld" = no; then 5181 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' 5182 - else 5183 - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' 5184 - fi 5185 - if test "$with_gnu_ld" = no; then 5186 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' 5187 - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' 5188 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 5189 - _LT_TAGVAR(hardcode_direct, $1)=yes 5190 - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes 5191 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' 5192 - # hardcode_minus_L: Not really in the search PATH, 5193 - # but as the default location of the library. 5194 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 5195 - fi 5196 - ;; 5197 - 5198 - hpux11*) 5199 - if test "$GCC" = yes && test "$with_gnu_ld" = no; then 5200 - case $host_cpu in 5201 - hppa*64*) 5202 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' 5203 - ;; 5204 - ia64*) 5205 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' 5206 - ;; 5207 - *) 5208 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' 5209 - ;; 5210 - esac 5211 - else 5212 - case $host_cpu in 5213 - hppa*64*) 5214 - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' 5215 - ;; 5216 - ia64*) 5217 - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' 5218 - ;; 5219 - *) 5220 - m4_if($1, [], [ 5221 - # Older versions of the 11.00 compiler do not understand -b yet 5222 - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) 5223 - _LT_LINKER_OPTION([if $CC understands -b], 5224 - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], 5225 - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], 5226 - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], 5227 - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) 5228 - ;; 5229 - esac 5230 - fi 5231 - if test "$with_gnu_ld" = no; then 5232 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' 5233 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 5234 - 5235 - case $host_cpu in 5236 - hppa*64*|ia64*) 5237 - _LT_TAGVAR(hardcode_direct, $1)=no 5238 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5239 - ;; 5240 - *) 5241 - _LT_TAGVAR(hardcode_direct, $1)=yes 5242 - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes 5243 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' 5244 - 5245 - # hardcode_minus_L: Not really in the search PATH, 5246 - # but as the default location of the library. 5247 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 5248 - ;; 5249 - esac 5250 - fi 5251 - ;; 5252 - 5253 - irix5* | irix6* | nonstopux*) 5254 - if test "$GCC" = yes; then 5255 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 5256 - # Try to use the -exported_symbol ld option, if it does not 5257 - # work, assume that -exports_file does not work either and 5258 - # implicitly export all symbols. 5259 - # This should be the same for all languages, so no per-tag cache variable. 5260 - AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], 5261 - [lt_cv_irix_exported_symbol], 5262 - [save_LDFLAGS="$LDFLAGS" 5263 - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" 5264 - AC_LINK_IFELSE( 5265 - [AC_LANG_SOURCE( 5266 - [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], 5267 - [C++], [[int foo (void) { return 0; }]], 5268 - [Fortran 77], [[ 5269 - subroutine foo 5270 - end]], 5271 - [Fortran], [[ 5272 - subroutine foo 5273 - end]])])], 5274 - [lt_cv_irix_exported_symbol=yes], 5275 - [lt_cv_irix_exported_symbol=no]) 5276 - LDFLAGS="$save_LDFLAGS"]) 5277 - if test "$lt_cv_irix_exported_symbol" = yes; then 5278 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' 5279 - fi 5280 - else 5281 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' 5282 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' 5283 - fi 5284 - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' 5285 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 5286 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 5287 - _LT_TAGVAR(inherit_rpath, $1)=yes 5288 - _LT_TAGVAR(link_all_deplibs, $1)=yes 5289 - ;; 5290 - 5291 - netbsd*) 5292 - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then 5293 - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out 5294 - else 5295 - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF 5296 - fi 5297 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' 5298 - _LT_TAGVAR(hardcode_direct, $1)=yes 5299 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5300 - ;; 5301 - 5302 - newsos6) 5303 - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' 5304 - _LT_TAGVAR(hardcode_direct, $1)=yes 5305 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 5306 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 5307 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5308 - ;; 5309 - 5310 - *nto* | *qnx*) 5311 - ;; 5312 - 5313 - openbsd*) 5314 - if test -f /usr/libexec/ld.so; then 5315 - _LT_TAGVAR(hardcode_direct, $1)=yes 5316 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5317 - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes 5318 - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then 5319 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' 5320 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' 5321 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' 5322 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' 5323 - else 5324 - case $host_os in 5325 - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) 5326 - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' 5327 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' 5328 - ;; 5329 - *) 5330 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' 5331 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' 5332 - ;; 5333 - esac 5334 - fi 5335 - else 5336 - _LT_TAGVAR(ld_shlibs, $1)=no 5337 - fi 5338 - ;; 5339 - 5340 - os2*) 5341 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' 5342 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 5343 - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported 5344 - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' 5345 - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' 5346 - ;; 5347 - 5348 - osf3*) 5349 - if test "$GCC" = yes; then 5350 - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' 5351 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 5352 - else 5353 - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' 5354 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' 5355 - fi 5356 - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' 5357 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 5358 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 5359 - ;; 5360 - 5361 - osf4* | osf5*) # as osf3* with the addition of -msym flag 5362 - if test "$GCC" = yes; then 5363 - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' 5364 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 5365 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 5366 - else 5367 - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' 5368 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' 5369 - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ 5370 - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' 5371 - 5372 - # Both c and cxx compiler support -rpath directly 5373 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' 5374 - fi 5375 - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' 5376 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 5377 - ;; 5378 - 5379 - solaris*) 5380 - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' 5381 - if test "$GCC" = yes; then 5382 - wlarc='${wl}' 5383 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' 5384 - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ 5385 - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' 5386 - else 5387 - case `$CC -V 2>&1` in 5388 - *"Compilers 5.0"*) 5389 - wlarc='' 5390 - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' 5391 - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ 5392 - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' 5393 - ;; 5394 - *) 5395 - wlarc='${wl}' 5396 - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' 5397 - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ 5398 - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' 5399 - ;; 5400 - esac 5401 - fi 5402 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' 5403 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5404 - case $host_os in 5405 - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; 5406 - *) 5407 - # The compiler driver will combine and reorder linker options, 5408 - # but understands `-z linker_flag'. GCC discards it without `$wl', 5409 - # but is careful enough not to reorder. 5410 - # Supported since Solaris 2.6 (maybe 2.5.1?) 5411 - if test "$GCC" = yes; then 5412 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' 5413 - else 5414 - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' 5415 - fi 5416 - ;; 5417 - esac 5418 - _LT_TAGVAR(link_all_deplibs, $1)=yes 5419 - ;; 5420 - 5421 - sunos4*) 5422 - if test "x$host_vendor" = xsequent; then 5423 - # Use $CC to link under sequent, because it throws in some extra .o 5424 - # files that make .init and .fini sections work. 5425 - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' 5426 - else 5427 - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' 5428 - fi 5429 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' 5430 - _LT_TAGVAR(hardcode_direct, $1)=yes 5431 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 5432 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5433 - ;; 5434 - 5435 - sysv4) 5436 - case $host_vendor in 5437 - sni) 5438 - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' 5439 - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? 5440 - ;; 5441 - siemens) 5442 - ## LD is ld it makes a PLAMLIB 5443 - ## CC just makes a GrossModule. 5444 - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' 5445 - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' 5446 - _LT_TAGVAR(hardcode_direct, $1)=no 5447 - ;; 5448 - motorola) 5449 - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' 5450 - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie 5451 - ;; 5452 - esac 5453 - runpath_var='LD_RUN_PATH' 5454 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5455 - ;; 5456 - 5457 - sysv4.3*) 5458 - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' 5459 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5460 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' 5461 - ;; 5462 - 5463 - sysv4*MP*) 5464 - if test -d /usr/nec; then 5465 - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' 5466 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5467 - runpath_var=LD_RUN_PATH 5468 - hardcode_runpath_var=yes 5469 - _LT_TAGVAR(ld_shlibs, $1)=yes 5470 - fi 5471 - ;; 5472 - 5473 - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) 5474 - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' 5475 - _LT_TAGVAR(archive_cmds_need_lc, $1)=no 5476 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5477 - runpath_var='LD_RUN_PATH' 5478 - 5479 - if test "$GCC" = yes; then 5480 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 5481 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 5482 - else 5483 - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 5484 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 5485 - fi 5486 - ;; 5487 - 5488 - sysv5* | sco3.2v5* | sco5v6*) 5489 - # Note: We can NOT use -z defs as we might desire, because we do not 5490 - # link with -lc, and that would cause any symbols used from libc to 5491 - # always be unresolved, which means just about no library would 5492 - # ever link correctly. If we're not using GNU ld we use -z text 5493 - # though, which does catch some bad symbols but isn't as heavy-handed 5494 - # as -z defs. 5495 - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' 5496 - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' 5497 - _LT_TAGVAR(archive_cmds_need_lc, $1)=no 5498 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5499 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' 5500 - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' 5501 - _LT_TAGVAR(link_all_deplibs, $1)=yes 5502 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' 5503 - runpath_var='LD_RUN_PATH' 5504 - 5505 - if test "$GCC" = yes; then 5506 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 5507 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 5508 - else 5509 - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 5510 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 5511 - fi 5512 - ;; 5513 - 5514 - uts4*) 5515 - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' 5516 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' 5517 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 5518 - ;; 5519 - 5520 - *) 5521 - _LT_TAGVAR(ld_shlibs, $1)=no 5522 - ;; 5523 - esac 5524 - 5525 - if test x$host_vendor = xsni; then 5526 - case $host in 5527 - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) 5528 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' 5529 - ;; 5530 - esac 5531 - fi 5532 - fi 5533 -]) 5534 -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) 5535 -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no 5536 - 5537 -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld 5538 - 5539 -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl 5540 -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl 5541 -_LT_DECL([], [extract_expsyms_cmds], [2], 5542 - [The commands to extract the exported symbol list from a shared archive]) 5543 - 5544 -# 5545 -# Do we need to explicitly link libc? 5546 -# 5547 -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in 5548 -x|xyes) 5549 - # Assume -lc should be added 5550 - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes 5551 - 5552 - if test "$enable_shared" = yes && test "$GCC" = yes; then 5553 - case $_LT_TAGVAR(archive_cmds, $1) in 5554 - *'~'*) 5555 - # FIXME: we may have to deal with multi-command sequences. 5556 - ;; 5557 - '$CC '*) 5558 - # Test whether the compiler implicitly links with -lc since on some 5559 - # systems, -lgcc has to come before -lc. If gcc already passes -lc 5560 - # to ld, don't add -lc before -lgcc. 5561 - AC_CACHE_CHECK([whether -lc should be explicitly linked in], 5562 - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), 5563 - [$RM conftest* 5564 - echo "$lt_simple_compile_test_code" > conftest.$ac_ext 5565 - 5566 - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then 5567 - soname=conftest 5568 - lib=conftest 5569 - libobjs=conftest.$ac_objext 5570 - deplibs= 5571 - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) 5572 - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) 5573 - compiler_flags=-v 5574 - linker_flags=-v 5575 - verstring= 5576 - output_objdir=. 5577 - libname=conftest 5578 - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) 5579 - _LT_TAGVAR(allow_undefined_flag, $1)= 5580 - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 5581 - then 5582 - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no 5583 - else 5584 - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes 5585 - fi 5586 - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag 5587 - else 5588 - cat conftest.err 1>&5 5589 - fi 5590 - $RM conftest* 5591 - ]) 5592 - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) 5593 - ;; 5594 - esac 5595 - fi 5596 - ;; 5597 -esac 5598 - 5599 -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], 5600 - [Whether or not to add -lc for building shared libraries]) 5601 -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], 5602 - [enable_shared_with_static_runtimes], [0], 5603 - [Whether or not to disallow shared libs when runtime libs are static]) 5604 -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], 5605 - [Compiler flag to allow reflexive dlopens]) 5606 -_LT_TAGDECL([], [whole_archive_flag_spec], [1], 5607 - [Compiler flag to generate shared objects directly from archives]) 5608 -_LT_TAGDECL([], [compiler_needs_object], [1], 5609 - [Whether the compiler copes with passing no objects directly]) 5610 -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], 5611 - [Create an old-style archive from a shared archive]) 5612 -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], 5613 - [Create a temporary old-style archive to link instead of a shared archive]) 5614 -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) 5615 -_LT_TAGDECL([], [archive_expsym_cmds], [2]) 5616 -_LT_TAGDECL([], [module_cmds], [2], 5617 - [Commands used to build a loadable module if different from building 5618 - a shared archive.]) 5619 -_LT_TAGDECL([], [module_expsym_cmds], [2]) 5620 -_LT_TAGDECL([], [with_gnu_ld], [1], 5621 - [Whether we are building with GNU ld or not]) 5622 -_LT_TAGDECL([], [allow_undefined_flag], [1], 5623 - [Flag that allows shared libraries with undefined symbols to be built]) 5624 -_LT_TAGDECL([], [no_undefined_flag], [1], 5625 - [Flag that enforces no undefined symbols]) 5626 -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], 5627 - [Flag to hardcode $libdir into a binary during linking. 5628 - This must work even if $libdir does not exist]) 5629 -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], 5630 - [[If ld is used when linking, flag to hardcode $libdir into a binary 5631 - during linking. This must work even if $libdir does not exist]]) 5632 -_LT_TAGDECL([], [hardcode_libdir_separator], [1], 5633 - [Whether we need a single "-rpath" flag with a separated argument]) 5634 -_LT_TAGDECL([], [hardcode_direct], [0], 5635 - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes 5636 - DIR into the resulting binary]) 5637 -_LT_TAGDECL([], [hardcode_direct_absolute], [0], 5638 - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes 5639 - DIR into the resulting binary and the resulting library dependency is 5640 - "absolute", i.e impossible to change by setting ${shlibpath_var} if the 5641 - library is relocated]) 5642 -_LT_TAGDECL([], [hardcode_minus_L], [0], 5643 - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR 5644 - into the resulting binary]) 5645 -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], 5646 - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR 5647 - into the resulting binary]) 5648 -_LT_TAGDECL([], [hardcode_automatic], [0], 5649 - [Set to "yes" if building a shared library automatically hardcodes DIR 5650 - into the library and all subsequent libraries and executables linked 5651 - against it]) 5652 -_LT_TAGDECL([], [inherit_rpath], [0], 5653 - [Set to yes if linker adds runtime paths of dependent libraries 5654 - to runtime path list]) 5655 -_LT_TAGDECL([], [link_all_deplibs], [0], 5656 - [Whether libtool must link a program against all its dependency libraries]) 5657 -_LT_TAGDECL([], [always_export_symbols], [0], 5658 - [Set to "yes" if exported symbols are required]) 5659 -_LT_TAGDECL([], [export_symbols_cmds], [2], 5660 - [The commands to list exported symbols]) 5661 -_LT_TAGDECL([], [exclude_expsyms], [1], 5662 - [Symbols that should not be listed in the preloaded symbols]) 5663 -_LT_TAGDECL([], [include_expsyms], [1], 5664 - [Symbols that must always be exported]) 5665 -_LT_TAGDECL([], [prelink_cmds], [2], 5666 - [Commands necessary for linking programs (against libraries) with templates]) 5667 -_LT_TAGDECL([], [postlink_cmds], [2], 5668 - [Commands necessary for finishing linking programs]) 5669 -_LT_TAGDECL([], [file_list_spec], [1], 5670 - [Specify filename containing input files]) 5671 -dnl FIXME: Not yet implemented 5672 -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], 5673 -dnl [Compiler flag to generate thread safe objects]) 5674 -])# _LT_LINKER_SHLIBS 5675 - 5676 - 5677 -# _LT_LANG_C_CONFIG([TAG]) 5678 -# ------------------------ 5679 -# Ensure that the configuration variables for a C compiler are suitably 5680 -# defined. These variables are subsequently used by _LT_CONFIG to write 5681 -# the compiler configuration to `libtool'. 5682 -m4_defun([_LT_LANG_C_CONFIG], 5683 -[m4_require([_LT_DECL_EGREP])dnl 5684 -lt_save_CC="$CC" 5685 -AC_LANG_PUSH(C) 5686 - 5687 -# Source file extension for C test sources. 5688 -ac_ext=c 5689 - 5690 -# Object file extension for compiled C test sources. 5691 -objext=o 5692 -_LT_TAGVAR(objext, $1)=$objext 5693 - 5694 -# Code to be used in simple compile tests 5695 -lt_simple_compile_test_code="int some_variable = 0;" 5696 - 5697 -# Code to be used in simple link tests 5698 -lt_simple_link_test_code='int main(){return(0);}' 5699 - 5700 -_LT_TAG_COMPILER 5701 -# Save the default compiler, since it gets overwritten when the other 5702 -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. 5703 -compiler_DEFAULT=$CC 5704 - 5705 -# save warnings/boilerplate of simple test code 5706 -_LT_COMPILER_BOILERPLATE 5707 -_LT_LINKER_BOILERPLATE 5708 - 5709 -if test -n "$compiler"; then 5710 - _LT_COMPILER_NO_RTTI($1) 5711 - _LT_COMPILER_PIC($1) 5712 - _LT_COMPILER_C_O($1) 5713 - _LT_COMPILER_FILE_LOCKS($1) 5714 - _LT_LINKER_SHLIBS($1) 5715 - _LT_SYS_DYNAMIC_LINKER($1) 5716 - _LT_LINKER_HARDCODE_LIBPATH($1) 5717 - LT_SYS_DLOPEN_SELF 5718 - _LT_CMD_STRIPLIB 5719 - 5720 - # Report which library types will actually be built 5721 - AC_MSG_CHECKING([if libtool supports shared libraries]) 5722 - AC_MSG_RESULT([$can_build_shared]) 5723 - 5724 - AC_MSG_CHECKING([whether to build shared libraries]) 5725 - test "$can_build_shared" = "no" && enable_shared=no 5726 - 5727 - # On AIX, shared libraries and static libraries use the same namespace, and 5728 - # are all built from PIC. 5729 - case $host_os in 5730 - aix3*) 5731 - test "$enable_shared" = yes && enable_static=no 5732 - if test -n "$RANLIB"; then 5733 - archive_cmds="$archive_cmds~\$RANLIB \$lib" 5734 - postinstall_cmds='$RANLIB $lib' 5735 - fi 5736 - ;; 5737 - 5738 - aix[[4-9]]*) 5739 - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then 5740 - test "$enable_shared" = yes && enable_static=no 5741 - fi 5742 - ;; 5743 - esac 5744 - AC_MSG_RESULT([$enable_shared]) 5745 - 5746 - AC_MSG_CHECKING([whether to build static libraries]) 5747 - # Make sure either enable_shared or enable_static is yes. 5748 - test "$enable_shared" = yes || enable_static=yes 5749 - AC_MSG_RESULT([$enable_static]) 5750 - 5751 - _LT_CONFIG($1) 5752 -fi 5753 -AC_LANG_POP 5754 -CC="$lt_save_CC" 5755 -])# _LT_LANG_C_CONFIG 5756 - 5757 - 5758 -# _LT_LANG_CXX_CONFIG([TAG]) 5759 -# -------------------------- 5760 -# Ensure that the configuration variables for a C++ compiler are suitably 5761 -# defined. These variables are subsequently used by _LT_CONFIG to write 5762 -# the compiler configuration to `libtool'. 5763 -m4_defun([_LT_LANG_CXX_CONFIG], 5764 -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl 5765 -m4_require([_LT_DECL_EGREP])dnl 5766 -m4_require([_LT_PATH_MANIFEST_TOOL])dnl 5767 -if test -n "$CXX" && ( test "X$CXX" != "Xno" && 5768 - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || 5769 - (test "X$CXX" != "Xg++"))) ; then 5770 - AC_PROG_CXXCPP 5771 -else 5772 - _lt_caught_CXX_error=yes 5773 -fi 5774 - 5775 -AC_LANG_PUSH(C++) 5776 -_LT_TAGVAR(archive_cmds_need_lc, $1)=no 5777 -_LT_TAGVAR(allow_undefined_flag, $1)= 5778 -_LT_TAGVAR(always_export_symbols, $1)=no 5779 -_LT_TAGVAR(archive_expsym_cmds, $1)= 5780 -_LT_TAGVAR(compiler_needs_object, $1)=no 5781 -_LT_TAGVAR(export_dynamic_flag_spec, $1)= 5782 -_LT_TAGVAR(hardcode_direct, $1)=no 5783 -_LT_TAGVAR(hardcode_direct_absolute, $1)=no 5784 -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= 5785 -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= 5786 -_LT_TAGVAR(hardcode_libdir_separator, $1)= 5787 -_LT_TAGVAR(hardcode_minus_L, $1)=no 5788 -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported 5789 -_LT_TAGVAR(hardcode_automatic, $1)=no 5790 -_LT_TAGVAR(inherit_rpath, $1)=no 5791 -_LT_TAGVAR(module_cmds, $1)= 5792 -_LT_TAGVAR(module_expsym_cmds, $1)= 5793 -_LT_TAGVAR(link_all_deplibs, $1)=unknown 5794 -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds 5795 -_LT_TAGVAR(reload_flag, $1)=$reload_flag 5796 -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds 5797 -_LT_TAGVAR(no_undefined_flag, $1)= 5798 -_LT_TAGVAR(whole_archive_flag_spec, $1)= 5799 -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no 5800 - 5801 -# Source file extension for C++ test sources. 5802 -ac_ext=cpp 5803 - 5804 -# Object file extension for compiled C++ test sources. 5805 -objext=o 5806 -_LT_TAGVAR(objext, $1)=$objext 5807 - 5808 -# No sense in running all these tests if we already determined that 5809 -# the CXX compiler isn't working. Some variables (like enable_shared) 5810 -# are currently assumed to apply to all compilers on this platform, 5811 -# and will be corrupted by setting them based on a non-working compiler. 5812 -if test "$_lt_caught_CXX_error" != yes; then 5813 - # Code to be used in simple compile tests 5814 - lt_simple_compile_test_code="int some_variable = 0;" 5815 - 5816 - # Code to be used in simple link tests 5817 - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' 5818 - 5819 - # ltmain only uses $CC for tagged configurations so make sure $CC is set. 5820 - _LT_TAG_COMPILER 5821 - 5822 - # save warnings/boilerplate of simple test code 5823 - _LT_COMPILER_BOILERPLATE 5824 - _LT_LINKER_BOILERPLATE 5825 - 5826 - # Allow CC to be a program name with arguments. 5827 - lt_save_CC=$CC 5828 - lt_save_CFLAGS=$CFLAGS 5829 - lt_save_LD=$LD 5830 - lt_save_GCC=$GCC 5831 - GCC=$GXX 5832 - lt_save_with_gnu_ld=$with_gnu_ld 5833 - lt_save_path_LD=$lt_cv_path_LD 5834 - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then 5835 - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx 5836 - else 5837 - $as_unset lt_cv_prog_gnu_ld 5838 - fi 5839 - if test -n "${lt_cv_path_LDCXX+set}"; then 5840 - lt_cv_path_LD=$lt_cv_path_LDCXX 5841 - else 5842 - $as_unset lt_cv_path_LD 5843 - fi 5844 - test -z "${LDCXX+set}" || LD=$LDCXX 5845 - CC=${CXX-"c++"} 5846 - CFLAGS=$CXXFLAGS 5847 - compiler=$CC 5848 - _LT_TAGVAR(compiler, $1)=$CC 5849 - _LT_CC_BASENAME([$compiler]) 5850 - 5851 - if test -n "$compiler"; then 5852 - # We don't want -fno-exception when compiling C++ code, so set the 5853 - # no_builtin_flag separately 5854 - if test "$GXX" = yes; then 5855 - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' 5856 - else 5857 - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= 5858 - fi 5859 - 5860 - if test "$GXX" = yes; then 5861 - # Set up default GNU C++ configuration 5862 - 5863 - LT_PATH_LD 5864 - 5865 - # Check if GNU C++ uses GNU ld as the underlying linker, since the 5866 - # archiving commands below assume that GNU ld is being used. 5867 - if test "$with_gnu_ld" = yes; then 5868 - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' 5869 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' 5870 - 5871 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 5872 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' 5873 - 5874 - # If archive_cmds runs LD, not CC, wlarc should be empty 5875 - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to 5876 - # investigate it a little bit more. (MM) 5877 - wlarc='${wl}' 5878 - 5879 - # ancient GNU ld didn't support --whole-archive et. al. 5880 - if eval "`$CC -print-prog-name=ld` --help 2>&1" | 5881 - $GREP 'no-whole-archive' > /dev/null; then 5882 - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' 5883 - else 5884 - _LT_TAGVAR(whole_archive_flag_spec, $1)= 5885 - fi 5886 - else 5887 - with_gnu_ld=no 5888 - wlarc= 5889 - 5890 - # A generic and very simple default shared library creation 5891 - # command for GNU C++ for the case where it uses the native 5892 - # linker, instead of GNU ld. If possible, this setting should 5893 - # overridden to take advantage of the native linker features on 5894 - # the platform it is being used on. 5895 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' 5896 - fi 5897 - 5898 - # Commands to make compiler produce verbose output that lists 5899 - # what "hidden" libraries, object files and flags are used when 5900 - # linking a shared library. 5901 - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' 5902 - 5903 - else 5904 - GXX=no 5905 - with_gnu_ld=no 5906 - wlarc= 5907 - fi 5908 - 5909 - # PORTME: fill in a description of your system's C++ link characteristics 5910 - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) 5911 - _LT_TAGVAR(ld_shlibs, $1)=yes 5912 - case $host_os in 5913 - aix3*) 5914 - # FIXME: insert proper C++ library support 5915 - _LT_TAGVAR(ld_shlibs, $1)=no 5916 - ;; 5917 - aix[[4-9]]*) 5918 - if test "$host_cpu" = ia64; then 5919 - # On IA64, the linker does run time linking by default, so we don't 5920 - # have to do anything special. 5921 - aix_use_runtimelinking=no 5922 - exp_sym_flag='-Bexport' 5923 - no_entry_flag="" 5924 - else 5925 - aix_use_runtimelinking=no 5926 - 5927 - # Test if we are trying to use run time linking or normal 5928 - # AIX style linking. If -brtl is somewhere in LDFLAGS, we 5929 - # need to do runtime linking. 5930 - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) 5931 - for ld_flag in $LDFLAGS; do 5932 - case $ld_flag in 5933 - *-brtl*) 5934 - aix_use_runtimelinking=yes 5935 - break 5936 - ;; 5937 - esac 5938 - done 5939 - ;; 5940 - esac 5941 - 5942 - exp_sym_flag='-bexport' 5943 - no_entry_flag='-bnoentry' 5944 - fi 5945 - 5946 - # When large executables or shared objects are built, AIX ld can 5947 - # have problems creating the table of contents. If linking a library 5948 - # or program results in "error TOC overflow" add -mminimal-toc to 5949 - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not 5950 - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. 5951 - 5952 - _LT_TAGVAR(archive_cmds, $1)='' 5953 - _LT_TAGVAR(hardcode_direct, $1)=yes 5954 - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes 5955 - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' 5956 - _LT_TAGVAR(link_all_deplibs, $1)=yes 5957 - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' 5958 - 5959 - if test "$GXX" = yes; then 5960 - case $host_os in aix4.[[012]]|aix4.[[012]].*) 5961 - # We only want to do this on AIX 4.2 and lower, the check 5962 - # below for broken collect2 doesn't work under 4.3+ 5963 - collect2name=`${CC} -print-prog-name=collect2` 5964 - if test -f "$collect2name" && 5965 - strings "$collect2name" | $GREP resolve_lib_name >/dev/null 5966 - then 5967 - # We have reworked collect2 5968 - : 5969 - else 5970 - # We have old collect2 5971 - _LT_TAGVAR(hardcode_direct, $1)=unsupported 5972 - # It fails to find uninstalled libraries when the uninstalled 5973 - # path is not listed in the libpath. Setting hardcode_minus_L 5974 - # to unsupported forces relinking 5975 - _LT_TAGVAR(hardcode_minus_L, $1)=yes 5976 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' 5977 - _LT_TAGVAR(hardcode_libdir_separator, $1)= 5978 - fi 5979 - esac 5980 - shared_flag='-shared' 5981 - if test "$aix_use_runtimelinking" = yes; then 5982 - shared_flag="$shared_flag "'${wl}-G' 5983 - fi 5984 - else 5985 - # not using gcc 5986 - if test "$host_cpu" = ia64; then 5987 - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release 5988 - # chokes on -Wl,-G. The following line is correct: 5989 - shared_flag='-G' 5990 - else 5991 - if test "$aix_use_runtimelinking" = yes; then 5992 - shared_flag='${wl}-G' 5993 - else 5994 - shared_flag='${wl}-bM:SRE' 5995 - fi 5996 - fi 5997 - fi 5998 - 5999 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' 6000 - # It seems that -bexpall does not export symbols beginning with 6001 - # underscore (_), so it is better to generate a list of symbols to 6002 - # export. 6003 - _LT_TAGVAR(always_export_symbols, $1)=yes 6004 - if test "$aix_use_runtimelinking" = yes; then 6005 - # Warning - without using the other runtime loading flags (-brtl), 6006 - # -berok will link without error, but may produce a broken library. 6007 - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' 6008 - # Determine the default libpath from the value encoded in an empty 6009 - # executable. 6010 - _LT_SYS_MODULE_PATH_AIX([$1]) 6011 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" 6012 - 6013 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" 6014 - else 6015 - if test "$host_cpu" = ia64; then 6016 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' 6017 - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" 6018 - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" 6019 - else 6020 - # Determine the default libpath from the value encoded in an 6021 - # empty executable. 6022 - _LT_SYS_MODULE_PATH_AIX([$1]) 6023 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" 6024 - # Warning - without using the other run time loading flags, 6025 - # -berok will link without error, but may produce a broken library. 6026 - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' 6027 - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' 6028 - if test "$with_gnu_ld" = yes; then 6029 - # We only use this code for GNU lds that support --whole-archive. 6030 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' 6031 - else 6032 - # Exported symbols can be pulled into shared objects from archives 6033 - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' 6034 - fi 6035 - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes 6036 - # This is similar to how AIX traditionally builds its shared 6037 - # libraries. 6038 - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' 6039 - fi 6040 - fi 6041 - ;; 6042 - 6043 - beos*) 6044 - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then 6045 - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported 6046 - # Joseph Beckenbach <jrb3@best.com> says some releases of gcc 6047 - # support --undefined. This deserves some investigation. FIXME 6048 - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 6049 - else 6050 - _LT_TAGVAR(ld_shlibs, $1)=no 6051 - fi 6052 - ;; 6053 - 6054 - chorus*) 6055 - case $cc_basename in 6056 - *) 6057 - # FIXME: insert proper C++ library support 6058 - _LT_TAGVAR(ld_shlibs, $1)=no 6059 - ;; 6060 - esac 6061 - ;; 6062 - 6063 - cygwin* | mingw* | pw32* | cegcc*) 6064 - case $GXX,$cc_basename in 6065 - ,cl* | no,cl*) 6066 - # Native MSVC 6067 - # hardcode_libdir_flag_spec is actually meaningless, as there is 6068 - # no search path for DLLs. 6069 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' 6070 - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported 6071 - _LT_TAGVAR(always_export_symbols, $1)=yes 6072 - _LT_TAGVAR(file_list_spec, $1)='@' 6073 - # Tell ltmain to make .lib files, not .a files. 6074 - libext=lib 6075 - # Tell ltmain to make .dll files, not .so files. 6076 - shrext_cmds=".dll" 6077 - # FIXME: Setting linknames here is a bad hack. 6078 - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' 6079 - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then 6080 - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; 6081 - else 6082 - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; 6083 - fi~ 6084 - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ 6085 - linknames=' 6086 - # The linker will not automatically build a static lib if we build a DLL. 6087 - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' 6088 - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes 6089 - # Don't use ranlib 6090 - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' 6091 - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ 6092 - lt_tool_outputfile="@TOOL_OUTPUT@"~ 6093 - case $lt_outputfile in 6094 - *.exe|*.EXE) ;; 6095 - *) 6096 - lt_outputfile="$lt_outputfile.exe" 6097 - lt_tool_outputfile="$lt_tool_outputfile.exe" 6098 - ;; 6099 - esac~ 6100 - func_to_tool_file "$lt_outputfile"~ 6101 - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then 6102 - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; 6103 - $RM "$lt_outputfile.manifest"; 6104 - fi' 6105 - ;; 6106 - *) 6107 - # g++ 6108 - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, 6109 - # as there is no search path for DLLs. 6110 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' 6111 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' 6112 - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported 6113 - _LT_TAGVAR(always_export_symbols, $1)=no 6114 - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes 6115 - 6116 - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then 6117 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' 6118 - # If the export-symbols file already is a .def file (1st line 6119 - # is EXPORTS), use it as is; otherwise, prepend... 6120 - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then 6121 - cp $export_symbols $output_objdir/$soname.def; 6122 - else 6123 - echo EXPORTS > $output_objdir/$soname.def; 6124 - cat $export_symbols >> $output_objdir/$soname.def; 6125 - fi~ 6126 - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' 6127 - else 6128 - _LT_TAGVAR(ld_shlibs, $1)=no 6129 - fi 6130 - ;; 6131 - esac 6132 - ;; 6133 - darwin* | rhapsody*) 6134 - _LT_DARWIN_LINKER_FEATURES($1) 6135 - ;; 6136 - 6137 - dgux*) 6138 - case $cc_basename in 6139 - ec++*) 6140 - # FIXME: insert proper C++ library support 6141 - _LT_TAGVAR(ld_shlibs, $1)=no 6142 - ;; 6143 - ghcx*) 6144 - # Green Hills C++ Compiler 6145 - # FIXME: insert proper C++ library support 6146 - _LT_TAGVAR(ld_shlibs, $1)=no 6147 - ;; 6148 - *) 6149 - # FIXME: insert proper C++ library support 6150 - _LT_TAGVAR(ld_shlibs, $1)=no 6151 - ;; 6152 - esac 6153 - ;; 6154 - 6155 - freebsd[[12]]*) 6156 - # C++ shared libraries reported to be fairly broken before 6157 - # switch to ELF 6158 - _LT_TAGVAR(ld_shlibs, $1)=no 6159 - ;; 6160 - 6161 - freebsd-elf*) 6162 - _LT_TAGVAR(archive_cmds_need_lc, $1)=no 6163 - ;; 6164 - 6165 - freebsd* | dragonfly*) 6166 - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF 6167 - # conventions 6168 - _LT_TAGVAR(ld_shlibs, $1)=yes 6169 - ;; 6170 - 6171 - gnu*) 6172 - ;; 6173 - 6174 - haiku*) 6175 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 6176 - _LT_TAGVAR(link_all_deplibs, $1)=yes 6177 - ;; 6178 - 6179 - hpux9*) 6180 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' 6181 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 6182 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' 6183 - _LT_TAGVAR(hardcode_direct, $1)=yes 6184 - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, 6185 - # but as the default 6186 - # location of the library. 6187 - 6188 - case $cc_basename in 6189 - CC*) 6190 - # FIXME: insert proper C++ library support 6191 - _LT_TAGVAR(ld_shlibs, $1)=no 6192 - ;; 6193 - aCC*) 6194 - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' 6195 - # Commands to make compiler produce verbose output that lists 6196 - # what "hidden" libraries, object files and flags are used when 6197 - # linking a shared library. 6198 - # 6199 - # There doesn't appear to be a way to prevent this compiler from 6200 - # explicitly linking system object files so we need to strip them 6201 - # from the output so that they don't get included in the library 6202 - # dependencies. 6203 - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' 6204 - ;; 6205 - *) 6206 - if test "$GXX" = yes; then 6207 - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' 6208 - else 6209 - # FIXME: insert proper C++ library support 6210 - _LT_TAGVAR(ld_shlibs, $1)=no 6211 - fi 6212 - ;; 6213 - esac 6214 - ;; 6215 - 6216 - hpux10*|hpux11*) 6217 - if test $with_gnu_ld = no; then 6218 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' 6219 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 6220 - 6221 - case $host_cpu in 6222 - hppa*64*|ia64*) 6223 - ;; 6224 - *) 6225 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' 6226 - ;; 6227 - esac 6228 - fi 6229 - case $host_cpu in 6230 - hppa*64*|ia64*) 6231 - _LT_TAGVAR(hardcode_direct, $1)=no 6232 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 6233 - ;; 6234 - *) 6235 - _LT_TAGVAR(hardcode_direct, $1)=yes 6236 - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes 6237 - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, 6238 - # but as the default 6239 - # location of the library. 6240 - ;; 6241 - esac 6242 - 6243 - case $cc_basename in 6244 - CC*) 6245 - # FIXME: insert proper C++ library support 6246 - _LT_TAGVAR(ld_shlibs, $1)=no 6247 - ;; 6248 - aCC*) 6249 - case $host_cpu in 6250 - hppa*64*) 6251 - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' 6252 - ;; 6253 - ia64*) 6254 - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' 6255 - ;; 6256 - *) 6257 - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' 6258 - ;; 6259 - esac 6260 - # Commands to make compiler produce verbose output that lists 6261 - # what "hidden" libraries, object files and flags are used when 6262 - # linking a shared library. 6263 - # 6264 - # There doesn't appear to be a way to prevent this compiler from 6265 - # explicitly linking system object files so we need to strip them 6266 - # from the output so that they don't get included in the library 6267 - # dependencies. 6268 - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' 6269 - ;; 6270 - *) 6271 - if test "$GXX" = yes; then 6272 - if test $with_gnu_ld = no; then 6273 - case $host_cpu in 6274 - hppa*64*) 6275 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' 6276 - ;; 6277 - ia64*) 6278 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' 6279 - ;; 6280 - *) 6281 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' 6282 - ;; 6283 - esac 6284 - fi 6285 - else 6286 - # FIXME: insert proper C++ library support 6287 - _LT_TAGVAR(ld_shlibs, $1)=no 6288 - fi 6289 - ;; 6290 - esac 6291 - ;; 6292 - 6293 - interix[[3-9]]*) 6294 - _LT_TAGVAR(hardcode_direct, $1)=no 6295 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 6296 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' 6297 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' 6298 - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. 6299 - # Instead, shared libraries are loaded at an image base (0x10000000 by 6300 - # default) and relocated if they conflict, which is a slow very memory 6301 - # consuming and fragmenting process. To avoid this, we pick a random, 6302 - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link 6303 - # time. Moving up from 0x10000000 also allows more sbrk(2) space. 6304 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' 6305 - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' 6306 - ;; 6307 - irix5* | irix6*) 6308 - case $cc_basename in 6309 - CC*) 6310 - # SGI C++ 6311 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' 6312 - 6313 - # Archives containing C++ object files must be created using 6314 - # "CC -ar", where "CC" is the IRIX C++ compiler. This is 6315 - # necessary to make sure instantiated templates are included 6316 - # in the archive. 6317 - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' 6318 - ;; 6319 - *) 6320 - if test "$GXX" = yes; then 6321 - if test "$with_gnu_ld" = no; then 6322 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 6323 - else 6324 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' 6325 - fi 6326 - fi 6327 - _LT_TAGVAR(link_all_deplibs, $1)=yes 6328 - ;; 6329 - esac 6330 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 6331 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 6332 - _LT_TAGVAR(inherit_rpath, $1)=yes 6333 - ;; 6334 - 6335 - linux* | k*bsd*-gnu | kopensolaris*-gnu) 6336 - case $cc_basename in 6337 - KCC*) 6338 - # Kuck and Associates, Inc. (KAI) C++ Compiler 6339 - 6340 - # KCC will only create a shared library if the output file 6341 - # ends with ".so" (or ".sl" for HP-UX), so rename the library 6342 - # to its proper name (with version) after linking. 6343 - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' 6344 - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' 6345 - # Commands to make compiler produce verbose output that lists 6346 - # what "hidden" libraries, object files and flags are used when 6347 - # linking a shared library. 6348 - # 6349 - # There doesn't appear to be a way to prevent this compiler from 6350 - # explicitly linking system object files so we need to strip them 6351 - # from the output so that they don't get included in the library 6352 - # dependencies. 6353 - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' 6354 - 6355 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' 6356 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' 6357 - 6358 - # Archives containing C++ object files must be created using 6359 - # "CC -Bstatic", where "CC" is the KAI C++ compiler. 6360 - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' 6361 - ;; 6362 - icpc* | ecpc* ) 6363 - # Intel C++ 6364 - with_gnu_ld=yes 6365 - # version 8.0 and above of icpc choke on multiply defined symbols 6366 - # if we add $predep_objects and $postdep_objects, however 7.1 and 6367 - # earlier do not add the objects themselves. 6368 - case `$CC -V 2>&1` in 6369 - *"Version 7."*) 6370 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' 6371 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' 6372 - ;; 6373 - *) # Version 8.0 or newer 6374 - tmp_idyn= 6375 - case $host_cpu in 6376 - ia64*) tmp_idyn=' -i_dynamic';; 6377 - esac 6378 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 6379 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' 6380 - ;; 6381 - esac 6382 - _LT_TAGVAR(archive_cmds_need_lc, $1)=no 6383 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' 6384 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' 6385 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' 6386 - ;; 6387 - pgCC* | pgcpp*) 6388 - # Portland Group C++ compiler 6389 - case `$CC -V` in 6390 - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) 6391 - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ 6392 - rm -rf $tpldir~ 6393 - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ 6394 - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' 6395 - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ 6396 - rm -rf $tpldir~ 6397 - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ 6398 - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ 6399 - $RANLIB $oldlib' 6400 - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ 6401 - rm -rf $tpldir~ 6402 - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ 6403 - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' 6404 - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ 6405 - rm -rf $tpldir~ 6406 - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ 6407 - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' 6408 - ;; 6409 - *) # Version 6 and above use weak symbols 6410 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' 6411 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' 6412 - ;; 6413 - esac 6414 - 6415 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' 6416 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' 6417 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' 6418 - ;; 6419 - cxx*) 6420 - # Compaq C++ 6421 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' 6422 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' 6423 - 6424 - runpath_var=LD_RUN_PATH 6425 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' 6426 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 6427 - 6428 - # Commands to make compiler produce verbose output that lists 6429 - # what "hidden" libraries, object files and flags are used when 6430 - # linking a shared library. 6431 - # 6432 - # There doesn't appear to be a way to prevent this compiler from 6433 - # explicitly linking system object files so we need to strip them 6434 - # from the output so that they don't get included in the library 6435 - # dependencies. 6436 - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' 6437 - ;; 6438 - xl* | mpixl* | bgxl*) 6439 - # IBM XL 8.0 on PPC, with GNU ld 6440 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 6441 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' 6442 - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' 6443 - if test "x$supports_anon_versioning" = xyes; then 6444 - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ 6445 - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ 6446 - echo "local: *; };" >> $output_objdir/$libname.ver~ 6447 - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' 6448 - fi 6449 - ;; 6450 - *) 6451 - case `$CC -V 2>&1 | sed 5q` in 6452 - *Sun\ C*) 6453 - # Sun C++ 5.9 6454 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' 6455 - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' 6456 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' 6457 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' 6458 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' 6459 - _LT_TAGVAR(compiler_needs_object, $1)=yes 6460 - 6461 - # Not sure whether something based on 6462 - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 6463 - # would be better. 6464 - output_verbose_link_cmd='func_echo_all' 6465 - 6466 - # Archives containing C++ object files must be created using 6467 - # "CC -xar", where "CC" is the Sun C++ compiler. This is 6468 - # necessary to make sure instantiated templates are included 6469 - # in the archive. 6470 - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' 6471 - ;; 6472 - esac 6473 - ;; 6474 - esac 6475 - ;; 6476 - 6477 - lynxos*) 6478 - # FIXME: insert proper C++ library support 6479 - _LT_TAGVAR(ld_shlibs, $1)=no 6480 - ;; 6481 - 6482 - m88k*) 6483 - # FIXME: insert proper C++ library support 6484 - _LT_TAGVAR(ld_shlibs, $1)=no 6485 - ;; 6486 - 6487 - mvs*) 6488 - case $cc_basename in 6489 - cxx*) 6490 - # FIXME: insert proper C++ library support 6491 - _LT_TAGVAR(ld_shlibs, $1)=no 6492 - ;; 6493 - *) 6494 - # FIXME: insert proper C++ library support 6495 - _LT_TAGVAR(ld_shlibs, $1)=no 6496 - ;; 6497 - esac 6498 - ;; 6499 - 6500 - netbsd*) 6501 - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then 6502 - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' 6503 - wlarc= 6504 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' 6505 - _LT_TAGVAR(hardcode_direct, $1)=yes 6506 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 6507 - fi 6508 - # Workaround some broken pre-1.5 toolchains 6509 - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' 6510 - ;; 6511 - 6512 - *nto* | *qnx*) 6513 - _LT_TAGVAR(ld_shlibs, $1)=yes 6514 - ;; 6515 - 6516 - openbsd2*) 6517 - # C++ shared libraries are fairly broken 6518 - _LT_TAGVAR(ld_shlibs, $1)=no 6519 - ;; 6520 - 6521 - openbsd*) 6522 - if test -f /usr/libexec/ld.so; then 6523 - _LT_TAGVAR(hardcode_direct, $1)=yes 6524 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 6525 - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes 6526 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' 6527 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' 6528 - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then 6529 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' 6530 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' 6531 - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' 6532 - fi 6533 - output_verbose_link_cmd=func_echo_all 6534 - else 6535 - _LT_TAGVAR(ld_shlibs, $1)=no 6536 - fi 6537 - ;; 6538 - 6539 - osf3* | osf4* | osf5*) 6540 - case $cc_basename in 6541 - KCC*) 6542 - # Kuck and Associates, Inc. (KAI) C++ Compiler 6543 - 6544 - # KCC will only create a shared library if the output file 6545 - # ends with ".so" (or ".sl" for HP-UX), so rename the library 6546 - # to its proper name (with version) after linking. 6547 - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' 6548 - 6549 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' 6550 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 6551 - 6552 - # Archives containing C++ object files must be created using 6553 - # the KAI C++ compiler. 6554 - case $host in 6555 - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; 6556 - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; 6557 - esac 6558 - ;; 6559 - RCC*) 6560 - # Rational C++ 2.4.1 6561 - # FIXME: insert proper C++ library support 6562 - _LT_TAGVAR(ld_shlibs, $1)=no 6563 - ;; 6564 - cxx*) 6565 - case $host in 6566 - osf3*) 6567 - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' 6568 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' 6569 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 6570 - ;; 6571 - *) 6572 - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' 6573 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' 6574 - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ 6575 - echo "-hidden">> $lib.exp~ 6576 - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ 6577 - $RM $lib.exp' 6578 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' 6579 - ;; 6580 - esac 6581 - 6582 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 6583 - 6584 - # Commands to make compiler produce verbose output that lists 6585 - # what "hidden" libraries, object files and flags are used when 6586 - # linking a shared library. 6587 - # 6588 - # There doesn't appear to be a way to prevent this compiler from 6589 - # explicitly linking system object files so we need to strip them 6590 - # from the output so that they don't get included in the library 6591 - # dependencies. 6592 - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' 6593 - ;; 6594 - *) 6595 - if test "$GXX" = yes && test "$with_gnu_ld" = no; then 6596 - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' 6597 - case $host in 6598 - osf3*) 6599 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 6600 - ;; 6601 - *) 6602 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 6603 - ;; 6604 - esac 6605 - 6606 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' 6607 - _LT_TAGVAR(hardcode_libdir_separator, $1)=: 6608 - 6609 - # Commands to make compiler produce verbose output that lists 6610 - # what "hidden" libraries, object files and flags are used when 6611 - # linking a shared library. 6612 - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' 6613 - 6614 - else 6615 - # FIXME: insert proper C++ library support 6616 - _LT_TAGVAR(ld_shlibs, $1)=no 6617 - fi 6618 - ;; 6619 - esac 6620 - ;; 6621 - 6622 - psos*) 6623 - # FIXME: insert proper C++ library support 6624 - _LT_TAGVAR(ld_shlibs, $1)=no 6625 - ;; 6626 - 6627 - sunos4*) 6628 - case $cc_basename in 6629 - CC*) 6630 - # Sun C++ 4.x 6631 - # FIXME: insert proper C++ library support 6632 - _LT_TAGVAR(ld_shlibs, $1)=no 6633 - ;; 6634 - lcc*) 6635 - # Lucid 6636 - # FIXME: insert proper C++ library support 6637 - _LT_TAGVAR(ld_shlibs, $1)=no 6638 - ;; 6639 - *) 6640 - # FIXME: insert proper C++ library support 6641 - _LT_TAGVAR(ld_shlibs, $1)=no 6642 - ;; 6643 - esac 6644 - ;; 6645 - 6646 - solaris*) 6647 - case $cc_basename in 6648 - CC* | sunCC*) 6649 - # Sun C++ 4.2, 5.x and Centerline C++ 6650 - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes 6651 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' 6652 - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' 6653 - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ 6654 - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' 6655 - 6656 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' 6657 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 6658 - case $host_os in 6659 - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; 6660 - *) 6661 - # The compiler driver will combine and reorder linker options, 6662 - # but understands `-z linker_flag'. 6663 - # Supported since Solaris 2.6 (maybe 2.5.1?) 6664 - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' 6665 - ;; 6666 - esac 6667 - _LT_TAGVAR(link_all_deplibs, $1)=yes 6668 - 6669 - output_verbose_link_cmd='func_echo_all' 6670 - 6671 - # Archives containing C++ object files must be created using 6672 - # "CC -xar", where "CC" is the Sun C++ compiler. This is 6673 - # necessary to make sure instantiated templates are included 6674 - # in the archive. 6675 - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' 6676 - ;; 6677 - gcx*) 6678 - # Green Hills C++ Compiler 6679 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' 6680 - 6681 - # The C++ compiler must be used to create the archive. 6682 - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' 6683 - ;; 6684 - *) 6685 - # GNU C++ compiler with Solaris linker 6686 - if test "$GXX" = yes && test "$with_gnu_ld" = no; then 6687 - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' 6688 - if $CC --version | $GREP -v '^2\.7' > /dev/null; then 6689 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' 6690 - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ 6691 - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' 6692 - 6693 - # Commands to make compiler produce verbose output that lists 6694 - # what "hidden" libraries, object files and flags are used when 6695 - # linking a shared library. 6696 - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' 6697 - else 6698 - # g++ 2.7 appears to require `-G' NOT `-shared' on this 6699 - # platform. 6700 - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' 6701 - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ 6702 - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' 6703 - 6704 - # Commands to make compiler produce verbose output that lists 6705 - # what "hidden" libraries, object files and flags are used when 6706 - # linking a shared library. 6707 - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' 6708 - fi 6709 - 6710 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' 6711 - case $host_os in 6712 - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; 6713 - *) 6714 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' 6715 - ;; 6716 - esac 6717 - fi 6718 - ;; 6719 - esac 6720 - ;; 6721 - 6722 - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) 6723 - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' 6724 - _LT_TAGVAR(archive_cmds_need_lc, $1)=no 6725 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 6726 - runpath_var='LD_RUN_PATH' 6727 - 6728 - case $cc_basename in 6729 - CC*) 6730 - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 6731 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 6732 - ;; 6733 - *) 6734 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 6735 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 6736 - ;; 6737 - esac 6738 - ;; 6739 - 6740 - sysv5* | sco3.2v5* | sco5v6*) 6741 - # Note: We can NOT use -z defs as we might desire, because we do not 6742 - # link with -lc, and that would cause any symbols used from libc to 6743 - # always be unresolved, which means just about no library would 6744 - # ever link correctly. If we're not using GNU ld we use -z text 6745 - # though, which does catch some bad symbols but isn't as heavy-handed 6746 - # as -z defs. 6747 - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' 6748 - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' 6749 - _LT_TAGVAR(archive_cmds_need_lc, $1)=no 6750 - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no 6751 - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' 6752 - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' 6753 - _LT_TAGVAR(link_all_deplibs, $1)=yes 6754 - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' 6755 - runpath_var='LD_RUN_PATH' 6756 - 6757 - case $cc_basename in 6758 - CC*) 6759 - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 6760 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 6761 - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ 6762 - '"$_LT_TAGVAR(old_archive_cmds, $1)" 6763 - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ 6764 - '"$_LT_TAGVAR(reload_cmds, $1)" 6765 - ;; 6766 - *) 6767 - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 6768 - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' 6769 - ;; 6770 - esac 6771 - ;; 6772 - 6773 - tandem*) 6774 - case $cc_basename in 6775 - NCC*) 6776 - # NonStop-UX NCC 3.20 6777 - # FIXME: insert proper C++ library support 6778 - _LT_TAGVAR(ld_shlibs, $1)=no 6779 - ;; 6780 - *) 6781 - # FIXME: insert proper C++ library support 6782 - _LT_TAGVAR(ld_shlibs, $1)=no 6783 - ;; 6784 - esac 6785 - ;; 6786 - 6787 - vxworks*) 6788 - # FIXME: insert proper C++ library support 6789 - _LT_TAGVAR(ld_shlibs, $1)=no 6790 - ;; 6791 - 6792 - *) 6793 - # FIXME: insert proper C++ library support 6794 - _LT_TAGVAR(ld_shlibs, $1)=no 6795 - ;; 6796 - esac 6797 - 6798 - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) 6799 - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no 6800 - 6801 - _LT_TAGVAR(GCC, $1)="$GXX" 6802 - _LT_TAGVAR(LD, $1)="$LD" 6803 - 6804 - ## CAVEAT EMPTOR: 6805 - ## There is no encapsulation within the following macros, do not change 6806 - ## the running order or otherwise move them around unless you know exactly 6807 - ## what you are doing... 6808 - _LT_SYS_HIDDEN_LIBDEPS($1) 6809 - _LT_COMPILER_PIC($1) 6810 - _LT_COMPILER_C_O($1) 6811 - _LT_COMPILER_FILE_LOCKS($1) 6812 - _LT_LINKER_SHLIBS($1) 6813 - _LT_SYS_DYNAMIC_LINKER($1) 6814 - _LT_LINKER_HARDCODE_LIBPATH($1) 6815 - 6816 - _LT_CONFIG($1) 6817 - fi # test -n "$compiler" 6818 - 6819 - CC=$lt_save_CC 6820 - CFLAGS=$lt_save_CFLAGS 6821 - LDCXX=$LD 6822 - LD=$lt_save_LD 6823 - GCC=$lt_save_GCC 6824 - with_gnu_ld=$lt_save_with_gnu_ld 6825 - lt_cv_path_LDCXX=$lt_cv_path_LD 6826 - lt_cv_path_LD=$lt_save_path_LD 6827 - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld 6828 - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld 6829 -fi # test "$_lt_caught_CXX_error" != yes 6830 - 6831 -AC_LANG_POP 6832 -])# _LT_LANG_CXX_CONFIG 6833 - 6834 - 6835 -# _LT_FUNC_STRIPNAME_CNF 6836 -# ---------------------- 6837 -# func_stripname_cnf prefix suffix name 6838 -# strip PREFIX and SUFFIX off of NAME. 6839 -# PREFIX and SUFFIX must not contain globbing or regex special 6840 -# characters, hashes, percent signs, but SUFFIX may contain a leading 6841 -# dot (in which case that matches only a dot). 6842 -# 6843 -# This function is identical to the (non-XSI) version of func_stripname, 6844 -# except this one can be used by m4 code that may be executed by configure, 6845 -# rather than the libtool script. 6846 -m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl 6847 -AC_REQUIRE([_LT_DECL_SED]) 6848 -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) 6849 -func_stripname_cnf () 6850 -{ 6851 - case ${2} in 6852 - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 6853 - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 6854 - esac 6855 -} # func_stripname_cnf 6856 -])# _LT_FUNC_STRIPNAME_CNF 6857 - 6858 -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) 6859 -# --------------------------------- 6860 -# Figure out "hidden" library dependencies from verbose 6861 -# compiler output when linking a shared library. 6862 -# Parse the compiler output and extract the necessary 6863 -# objects, libraries and library flags. 6864 -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], 6865 -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl 6866 -AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl 6867 -# Dependencies to place before and after the object being linked: 6868 -_LT_TAGVAR(predep_objects, $1)= 6869 -_LT_TAGVAR(postdep_objects, $1)= 6870 -_LT_TAGVAR(predeps, $1)= 6871 -_LT_TAGVAR(postdeps, $1)= 6872 -_LT_TAGVAR(compiler_lib_search_path, $1)= 6873 - 6874 -dnl we can't use the lt_simple_compile_test_code here, 6875 -dnl because it contains code intended for an executable, 6876 -dnl not a library. It's possible we should let each 6877 -dnl tag define a new lt_????_link_test_code variable, 6878 -dnl but it's only used here... 6879 -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF 6880 -int a; 6881 -void foo (void) { a = 0; } 6882 -_LT_EOF 6883 -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF 6884 -class Foo 6885 -{ 6886 -public: 6887 - Foo (void) { a = 0; } 6888 -private: 6889 - int a; 6890 -}; 6891 -_LT_EOF 6892 -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF 6893 - subroutine foo 6894 - implicit none 6895 - integer*4 a 6896 - a=0 6897 - return 6898 - end 6899 -_LT_EOF 6900 -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF 6901 - subroutine foo 6902 - implicit none 6903 - integer a 6904 - a=0 6905 - return 6906 - end 6907 -_LT_EOF 6908 -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF 6909 -public class foo { 6910 - private int a; 6911 - public void bar (void) { 6912 - a = 0; 6913 - } 6914 -}; 6915 -_LT_EOF 6916 -]) 6917 - 6918 -_lt_libdeps_save_CFLAGS=$CFLAGS 6919 -case "$CC $CFLAGS " in #( 6920 -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; 6921 -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; 6922 -esac 6923 - 6924 -dnl Parse the compiler output and extract the necessary 6925 -dnl objects, libraries and library flags. 6926 -if AC_TRY_EVAL(ac_compile); then 6927 - # Parse the compiler output and extract the necessary 6928 - # objects, libraries and library flags. 6929 - 6930 - # Sentinel used to keep track of whether or not we are before 6931 - # the conftest object file. 6932 - pre_test_object_deps_done=no 6933 - 6934 - for p in `eval "$output_verbose_link_cmd"`; do 6935 - case ${prev}${p} in 6936 - 6937 - -L* | -R* | -l*) 6938 - # Some compilers place space between "-{L,R}" and the path. 6939 - # Remove the space. 6940 - if test $p = "-L" || 6941 - test $p = "-R"; then 6942 - prev=$p 6943 - continue 6944 - fi 6945 - 6946 - # Expand the sysroot to ease extracting the directories later. 6947 - if test -z "$prev"; then 6948 - case $p in 6949 - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; 6950 - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; 6951 - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; 6952 - esac 6953 - fi 6954 - case $p in 6955 - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; 6956 - esac 6957 - if test "$pre_test_object_deps_done" = no; then 6958 - case ${prev} in 6959 - -L | -R) 6960 - # Internal compiler library paths should come after those 6961 - # provided the user. The postdeps already come after the 6962 - # user supplied libs so there is no need to process them. 6963 - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then 6964 - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" 6965 - else 6966 - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" 6967 - fi 6968 - ;; 6969 - # The "-l" case would never come before the object being 6970 - # linked, so don't bother handling this case. 6971 - esac 6972 - else 6973 - if test -z "$_LT_TAGVAR(postdeps, $1)"; then 6974 - _LT_TAGVAR(postdeps, $1)="${prev}${p}" 6975 - else 6976 - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" 6977 - fi 6978 - fi 6979 - prev= 6980 - ;; 6981 - 6982 - *.lto.$objext) ;; # Ignore GCC LTO objects 6983 - *.$objext) 6984 - # This assumes that the test object file only shows up 6985 - # once in the compiler output. 6986 - if test "$p" = "conftest.$objext"; then 6987 - pre_test_object_deps_done=yes 6988 - continue 6989 - fi 6990 - 6991 - if test "$pre_test_object_deps_done" = no; then 6992 - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then 6993 - _LT_TAGVAR(predep_objects, $1)="$p" 6994 - else 6995 - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" 6996 - fi 6997 - else 6998 - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then 6999 - _LT_TAGVAR(postdep_objects, $1)="$p" 7000 - else 7001 - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" 7002 - fi 7003 - fi 7004 - ;; 7005 - 7006 - *) ;; # Ignore the rest. 7007 - 7008 - esac 7009 - done 7010 - 7011 - # Clean up. 7012 - rm -f a.out a.exe 7013 -else 7014 - echo "libtool.m4: error: problem compiling $1 test program" 7015 -fi 7016 - 7017 -$RM -f confest.$objext 7018 -CFLAGS=$_lt_libdeps_save_CFLAGS 7019 - 7020 -# PORTME: override above test on systems where it is broken 7021 -m4_if([$1], [CXX], 7022 -[case $host_os in 7023 -interix[[3-9]]*) 7024 - # Interix 3.5 installs completely hosed .la files for C++, so rather than 7025 - # hack all around it, let's just trust "g++" to DTRT. 7026 - _LT_TAGVAR(predep_objects,$1)= 7027 - _LT_TAGVAR(postdep_objects,$1)= 7028 - _LT_TAGVAR(postdeps,$1)= 7029 - ;; 7030 - 7031 -linux*) 7032 - case `$CC -V 2>&1 | sed 5q` in 7033 - *Sun\ C*) 7034 - # Sun C++ 5.9 7035 - 7036 - # The more standards-conforming stlport4 library is 7037 - # incompatible with the Cstd library. Avoid specifying 7038 - # it if it's in CXXFLAGS. Ignore libCrun as 7039 - # -library=stlport4 depends on it. 7040 - case " $CXX $CXXFLAGS " in 7041 - *" -library=stlport4 "*) 7042 - solaris_use_stlport4=yes 7043 - ;; 7044 - esac 7045 - 7046 - if test "$solaris_use_stlport4" != yes; then 7047 - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' 7048 - fi 7049 - ;; 7050 - esac 7051 - ;; 7052 - 7053 -solaris*) 7054 - case $cc_basename in 7055 - CC* | sunCC*) 7056 - # The more standards-conforming stlport4 library is 7057 - # incompatible with the Cstd library. Avoid specifying 7058 - # it if it's in CXXFLAGS. Ignore libCrun as 7059 - # -library=stlport4 depends on it. 7060 - case " $CXX $CXXFLAGS " in 7061 - *" -library=stlport4 "*) 7062 - solaris_use_stlport4=yes 7063 - ;; 7064 - esac 7065 - 7066 - # Adding this requires a known-good setup of shared libraries for 7067 - # Sun compiler versions before 5.6, else PIC objects from an old 7068 - # archive will be linked into the output, leading to subtle bugs. 7069 - if test "$solaris_use_stlport4" != yes; then 7070 - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' 7071 - fi 7072 - ;; 7073 - esac 7074 - ;; 7075 -esac 7076 -]) 7077 - 7078 -case " $_LT_TAGVAR(postdeps, $1) " in 7079 -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; 7080 -esac 7081 - _LT_TAGVAR(compiler_lib_search_dirs, $1)= 7082 -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then 7083 - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` 7084 -fi 7085 -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], 7086 - [The directories searched by this compiler when creating a shared library]) 7087 -_LT_TAGDECL([], [predep_objects], [1], 7088 - [Dependencies to place before and after the objects being linked to 7089 - create a shared library]) 7090 -_LT_TAGDECL([], [postdep_objects], [1]) 7091 -_LT_TAGDECL([], [predeps], [1]) 7092 -_LT_TAGDECL([], [postdeps], [1]) 7093 -_LT_TAGDECL([], [compiler_lib_search_path], [1], 7094 - [The library search path used internally by the compiler when linking 7095 - a shared library]) 7096 -])# _LT_SYS_HIDDEN_LIBDEPS 7097 - 7098 - 7099 -# _LT_LANG_F77_CONFIG([TAG]) 7100 -# -------------------------- 7101 -# Ensure that the configuration variables for a Fortran 77 compiler are 7102 -# suitably defined. These variables are subsequently used by _LT_CONFIG 7103 -# to write the compiler configuration to `libtool'. 7104 -m4_defun([_LT_LANG_F77_CONFIG], 7105 -[AC_LANG_PUSH(Fortran 77) 7106 -if test -z "$F77" || test "X$F77" = "Xno"; then 7107 - _lt_disable_F77=yes 7108 -fi 7109 - 7110 -_LT_TAGVAR(archive_cmds_need_lc, $1)=no 7111 -_LT_TAGVAR(allow_undefined_flag, $1)= 7112 -_LT_TAGVAR(always_export_symbols, $1)=no 7113 -_LT_TAGVAR(archive_expsym_cmds, $1)= 7114 -_LT_TAGVAR(export_dynamic_flag_spec, $1)= 7115 -_LT_TAGVAR(hardcode_direct, $1)=no 7116 -_LT_TAGVAR(hardcode_direct_absolute, $1)=no 7117 -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= 7118 -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= 7119 -_LT_TAGVAR(hardcode_libdir_separator, $1)= 7120 -_LT_TAGVAR(hardcode_minus_L, $1)=no 7121 -_LT_TAGVAR(hardcode_automatic, $1)=no 7122 -_LT_TAGVAR(inherit_rpath, $1)=no 7123 -_LT_TAGVAR(module_cmds, $1)= 7124 -_LT_TAGVAR(module_expsym_cmds, $1)= 7125 -_LT_TAGVAR(link_all_deplibs, $1)=unknown 7126 -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds 7127 -_LT_TAGVAR(reload_flag, $1)=$reload_flag 7128 -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds 7129 -_LT_TAGVAR(no_undefined_flag, $1)= 7130 -_LT_TAGVAR(whole_archive_flag_spec, $1)= 7131 -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no 7132 - 7133 -# Source file extension for f77 test sources. 7134 -ac_ext=f 7135 - 7136 -# Object file extension for compiled f77 test sources. 7137 -objext=o 7138 -_LT_TAGVAR(objext, $1)=$objext 7139 - 7140 -# No sense in running all these tests if we already determined that 7141 -# the F77 compiler isn't working. Some variables (like enable_shared) 7142 -# are currently assumed to apply to all compilers on this platform, 7143 -# and will be corrupted by setting them based on a non-working compiler. 7144 -if test "$_lt_disable_F77" != yes; then 7145 - # Code to be used in simple compile tests 7146 - lt_simple_compile_test_code="\ 7147 - subroutine t 7148 - return 7149 - end 7150 -" 7151 - 7152 - # Code to be used in simple link tests 7153 - lt_simple_link_test_code="\ 7154 - program t 7155 - end 7156 -" 7157 - 7158 - # ltmain only uses $CC for tagged configurations so make sure $CC is set. 7159 - _LT_TAG_COMPILER 7160 - 7161 - # save warnings/boilerplate of simple test code 7162 - _LT_COMPILER_BOILERPLATE 7163 - _LT_LINKER_BOILERPLATE 7164 - 7165 - # Allow CC to be a program name with arguments. 7166 - lt_save_CC="$CC" 7167 - lt_save_GCC=$GCC 7168 - lt_save_CFLAGS=$CFLAGS 7169 - CC=${F77-"f77"} 7170 - CFLAGS=$FFLAGS 7171 - compiler=$CC 7172 - _LT_TAGVAR(compiler, $1)=$CC 7173 - _LT_CC_BASENAME([$compiler]) 7174 - GCC=$G77 7175 - if test -n "$compiler"; then 7176 - AC_MSG_CHECKING([if libtool supports shared libraries]) 7177 - AC_MSG_RESULT([$can_build_shared]) 7178 - 7179 - AC_MSG_CHECKING([whether to build shared libraries]) 7180 - test "$can_build_shared" = "no" && enable_shared=no 7181 - 7182 - # On AIX, shared libraries and static libraries use the same namespace, and 7183 - # are all built from PIC. 7184 - case $host_os in 7185 - aix3*) 7186 - test "$enable_shared" = yes && enable_static=no 7187 - if test -n "$RANLIB"; then 7188 - archive_cmds="$archive_cmds~\$RANLIB \$lib" 7189 - postinstall_cmds='$RANLIB $lib' 7190 - fi 7191 - ;; 7192 - aix[[4-9]]*) 7193 - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then 7194 - test "$enable_shared" = yes && enable_static=no 7195 - fi 7196 - ;; 7197 - esac 7198 - AC_MSG_RESULT([$enable_shared]) 7199 - 7200 - AC_MSG_CHECKING([whether to build static libraries]) 7201 - # Make sure either enable_shared or enable_static is yes. 7202 - test "$enable_shared" = yes || enable_static=yes 7203 - AC_MSG_RESULT([$enable_static]) 7204 - 7205 - _LT_TAGVAR(GCC, $1)="$G77" 7206 - _LT_TAGVAR(LD, $1)="$LD" 7207 - 7208 - ## CAVEAT EMPTOR: 7209 - ## There is no encapsulation within the following macros, do not change 7210 - ## the running order or otherwise move them around unless you know exactly 7211 - ## what you are doing... 7212 - _LT_COMPILER_PIC($1) 7213 - _LT_COMPILER_C_O($1) 7214 - _LT_COMPILER_FILE_LOCKS($1) 7215 - _LT_LINKER_SHLIBS($1) 7216 - _LT_SYS_DYNAMIC_LINKER($1) 7217 - _LT_LINKER_HARDCODE_LIBPATH($1) 7218 - 7219 - _LT_CONFIG($1) 7220 - fi # test -n "$compiler" 7221 - 7222 - GCC=$lt_save_GCC 7223 - CC="$lt_save_CC" 7224 - CFLAGS="$lt_save_CFLAGS" 7225 -fi # test "$_lt_disable_F77" != yes 7226 - 7227 -AC_LANG_POP 7228 -])# _LT_LANG_F77_CONFIG 7229 - 7230 - 7231 -# _LT_LANG_FC_CONFIG([TAG]) 7232 -# ------------------------- 7233 -# Ensure that the configuration variables for a Fortran compiler are 7234 -# suitably defined. These variables are subsequently used by _LT_CONFIG 7235 -# to write the compiler configuration to `libtool'. 7236 -m4_defun([_LT_LANG_FC_CONFIG], 7237 -[AC_LANG_PUSH(Fortran) 7238 - 7239 -if test -z "$FC" || test "X$FC" = "Xno"; then 7240 - _lt_disable_FC=yes 7241 -fi 7242 - 7243 -_LT_TAGVAR(archive_cmds_need_lc, $1)=no 7244 -_LT_TAGVAR(allow_undefined_flag, $1)= 7245 -_LT_TAGVAR(always_export_symbols, $1)=no 7246 -_LT_TAGVAR(archive_expsym_cmds, $1)= 7247 -_LT_TAGVAR(export_dynamic_flag_spec, $1)= 7248 -_LT_TAGVAR(hardcode_direct, $1)=no 7249 -_LT_TAGVAR(hardcode_direct_absolute, $1)=no 7250 -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= 7251 -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= 7252 -_LT_TAGVAR(hardcode_libdir_separator, $1)= 7253 -_LT_TAGVAR(hardcode_minus_L, $1)=no 7254 -_LT_TAGVAR(hardcode_automatic, $1)=no 7255 -_LT_TAGVAR(inherit_rpath, $1)=no 7256 -_LT_TAGVAR(module_cmds, $1)= 7257 -_LT_TAGVAR(module_expsym_cmds, $1)= 7258 -_LT_TAGVAR(link_all_deplibs, $1)=unknown 7259 -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds 7260 -_LT_TAGVAR(reload_flag, $1)=$reload_flag 7261 -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds 7262 -_LT_TAGVAR(no_undefined_flag, $1)= 7263 -_LT_TAGVAR(whole_archive_flag_spec, $1)= 7264 -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no 7265 - 7266 -# Source file extension for fc test sources. 7267 -ac_ext=${ac_fc_srcext-f} 7268 - 7269 -# Object file extension for compiled fc test sources. 7270 -objext=o 7271 -_LT_TAGVAR(objext, $1)=$objext 7272 - 7273 -# No sense in running all these tests if we already determined that 7274 -# the FC compiler isn't working. Some variables (like enable_shared) 7275 -# are currently assumed to apply to all compilers on this platform, 7276 -# and will be corrupted by setting them based on a non-working compiler. 7277 -if test "$_lt_disable_FC" != yes; then 7278 - # Code to be used in simple compile tests 7279 - lt_simple_compile_test_code="\ 7280 - subroutine t 7281 - return 7282 - end 7283 -" 7284 - 7285 - # Code to be used in simple link tests 7286 - lt_simple_link_test_code="\ 7287 - program t 7288 - end 7289 -" 7290 - 7291 - # ltmain only uses $CC for tagged configurations so make sure $CC is set. 7292 - _LT_TAG_COMPILER 7293 - 7294 - # save warnings/boilerplate of simple test code 7295 - _LT_COMPILER_BOILERPLATE 7296 - _LT_LINKER_BOILERPLATE 7297 - 7298 - # Allow CC to be a program name with arguments. 7299 - lt_save_CC="$CC" 7300 - lt_save_GCC=$GCC 7301 - lt_save_CFLAGS=$CFLAGS 7302 - CC=${FC-"f95"} 7303 - CFLAGS=$FCFLAGS 7304 - compiler=$CC 7305 - GCC=$ac_cv_fc_compiler_gnu 7306 - 7307 - _LT_TAGVAR(compiler, $1)=$CC 7308 - _LT_CC_BASENAME([$compiler]) 7309 - 7310 - if test -n "$compiler"; then 7311 - AC_MSG_CHECKING([if libtool supports shared libraries]) 7312 - AC_MSG_RESULT([$can_build_shared]) 7313 - 7314 - AC_MSG_CHECKING([whether to build shared libraries]) 7315 - test "$can_build_shared" = "no" && enable_shared=no 7316 - 7317 - # On AIX, shared libraries and static libraries use the same namespace, and 7318 - # are all built from PIC. 7319 - case $host_os in 7320 - aix3*) 7321 - test "$enable_shared" = yes && enable_static=no 7322 - if test -n "$RANLIB"; then 7323 - archive_cmds="$archive_cmds~\$RANLIB \$lib" 7324 - postinstall_cmds='$RANLIB $lib' 7325 - fi 7326 - ;; 7327 - aix[[4-9]]*) 7328 - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then 7329 - test "$enable_shared" = yes && enable_static=no 7330 - fi 7331 - ;; 7332 - esac 7333 - AC_MSG_RESULT([$enable_shared]) 7334 - 7335 - AC_MSG_CHECKING([whether to build static libraries]) 7336 - # Make sure either enable_shared or enable_static is yes. 7337 - test "$enable_shared" = yes || enable_static=yes 7338 - AC_MSG_RESULT([$enable_static]) 7339 - 7340 - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" 7341 - _LT_TAGVAR(LD, $1)="$LD" 7342 - 7343 - ## CAVEAT EMPTOR: 7344 - ## There is no encapsulation within the following macros, do not change 7345 - ## the running order or otherwise move them around unless you know exactly 7346 - ## what you are doing... 7347 - _LT_SYS_HIDDEN_LIBDEPS($1) 7348 - _LT_COMPILER_PIC($1) 7349 - _LT_COMPILER_C_O($1) 7350 - _LT_COMPILER_FILE_LOCKS($1) 7351 - _LT_LINKER_SHLIBS($1) 7352 - _LT_SYS_DYNAMIC_LINKER($1) 7353 - _LT_LINKER_HARDCODE_LIBPATH($1) 7354 - 7355 - _LT_CONFIG($1) 7356 - fi # test -n "$compiler" 7357 - 7358 - GCC=$lt_save_GCC 7359 - CC=$lt_save_CC 7360 - CFLAGS=$lt_save_CFLAGS 7361 -fi # test "$_lt_disable_FC" != yes 7362 - 7363 -AC_LANG_POP 7364 -])# _LT_LANG_FC_CONFIG 7365 - 7366 - 7367 -# _LT_LANG_GCJ_CONFIG([TAG]) 7368 -# -------------------------- 7369 -# Ensure that the configuration variables for the GNU Java Compiler compiler 7370 -# are suitably defined. These variables are subsequently used by _LT_CONFIG 7371 -# to write the compiler configuration to `libtool'. 7372 -m4_defun([_LT_LANG_GCJ_CONFIG], 7373 -[AC_REQUIRE([LT_PROG_GCJ])dnl 7374 -AC_LANG_SAVE 7375 - 7376 -# Source file extension for Java test sources. 7377 -ac_ext=java 7378 - 7379 -# Object file extension for compiled Java test sources. 7380 -objext=o 7381 -_LT_TAGVAR(objext, $1)=$objext 7382 - 7383 -# Code to be used in simple compile tests 7384 -lt_simple_compile_test_code="class foo {}" 7385 - 7386 -# Code to be used in simple link tests 7387 -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' 7388 - 7389 -# ltmain only uses $CC for tagged configurations so make sure $CC is set. 7390 -_LT_TAG_COMPILER 7391 - 7392 -# save warnings/boilerplate of simple test code 7393 -_LT_COMPILER_BOILERPLATE 7394 -_LT_LINKER_BOILERPLATE 7395 - 7396 -# Allow CC to be a program name with arguments. 7397 -lt_save_CC=$CC 7398 -lt_save_CFLAGS=$CFLAGS 7399 -lt_save_GCC=$GCC 7400 -GCC=yes 7401 -CC=${GCJ-"gcj"} 7402 -CFLAGS=$GCJFLAGS 7403 -compiler=$CC 7404 -_LT_TAGVAR(compiler, $1)=$CC 7405 -_LT_TAGVAR(LD, $1)="$LD" 7406 -_LT_CC_BASENAME([$compiler]) 7407 - 7408 -# GCJ did not exist at the time GCC didn't implicitly link libc in. 7409 -_LT_TAGVAR(archive_cmds_need_lc, $1)=no 7410 - 7411 -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds 7412 -_LT_TAGVAR(reload_flag, $1)=$reload_flag 7413 -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds 7414 - 7415 -if test -n "$compiler"; then 7416 - _LT_COMPILER_NO_RTTI($1) 7417 - _LT_COMPILER_PIC($1) 7418 - _LT_COMPILER_C_O($1) 7419 - _LT_COMPILER_FILE_LOCKS($1) 7420 - _LT_LINKER_SHLIBS($1) 7421 - _LT_LINKER_HARDCODE_LIBPATH($1) 7422 - 7423 - _LT_CONFIG($1) 7424 -fi 7425 - 7426 -AC_LANG_RESTORE 7427 - 7428 -GCC=$lt_save_GCC 7429 -CC=$lt_save_CC 7430 -CFLAGS=$lt_save_CFLAGS 7431 -])# _LT_LANG_GCJ_CONFIG 7432 - 7433 - 7434 -# _LT_LANG_RC_CONFIG([TAG]) 7435 -# ------------------------- 7436 -# Ensure that the configuration variables for the Windows resource compiler 7437 -# are suitably defined. These variables are subsequently used by _LT_CONFIG 7438 -# to write the compiler configuration to `libtool'. 7439 -m4_defun([_LT_LANG_RC_CONFIG], 7440 -[AC_REQUIRE([LT_PROG_RC])dnl 7441 -AC_LANG_SAVE 7442 - 7443 -# Source file extension for RC test sources. 7444 -ac_ext=rc 7445 - 7446 -# Object file extension for compiled RC test sources. 7447 -objext=o 7448 -_LT_TAGVAR(objext, $1)=$objext 7449 - 7450 -# Code to be used in simple compile tests 7451 -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' 7452 - 7453 -# Code to be used in simple link tests 7454 -lt_simple_link_test_code="$lt_simple_compile_test_code" 7455 - 7456 -# ltmain only uses $CC for tagged configurations so make sure $CC is set. 7457 -_LT_TAG_COMPILER 7458 - 7459 -# save warnings/boilerplate of simple test code 7460 -_LT_COMPILER_BOILERPLATE 7461 -_LT_LINKER_BOILERPLATE 7462 - 7463 -# Allow CC to be a program name with arguments. 7464 -lt_save_CC="$CC" 7465 -lt_save_CFLAGS=$CFLAGS 7466 -lt_save_GCC=$GCC 7467 -GCC= 7468 -CC=${RC-"windres"} 7469 -CFLAGS= 7470 -compiler=$CC 7471 -_LT_TAGVAR(compiler, $1)=$CC 7472 -_LT_CC_BASENAME([$compiler]) 7473 -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes 7474 - 7475 -if test -n "$compiler"; then 7476 - : 7477 - _LT_CONFIG($1) 7478 -fi 7479 - 7480 -GCC=$lt_save_GCC 7481 -AC_LANG_RESTORE 7482 -CC=$lt_save_CC 7483 -CFLAGS=$lt_save_CFLAGS 7484 -])# _LT_LANG_RC_CONFIG 7485 - 7486 - 7487 -# LT_PROG_GCJ 7488 -# ----------- 7489 -AC_DEFUN([LT_PROG_GCJ], 7490 -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], 7491 - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], 7492 - [AC_CHECK_TOOL(GCJ, gcj,) 7493 - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" 7494 - AC_SUBST(GCJFLAGS)])])[]dnl 7495 -]) 7496 - 7497 -# Old name: 7498 -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) 7499 -dnl aclocal-1.4 backwards compatibility: 7500 -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) 7501 - 7502 - 7503 -# LT_PROG_RC 7504 -# ---------- 7505 -AC_DEFUN([LT_PROG_RC], 7506 -[AC_CHECK_TOOL(RC, windres,) 7507 -]) 7508 - 7509 -# Old name: 7510 -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) 7511 -dnl aclocal-1.4 backwards compatibility: 7512 -dnl AC_DEFUN([LT_AC_PROG_RC], []) 7513 - 7514 - 7515 -# _LT_DECL_EGREP 7516 -# -------------- 7517 -# If we don't have a new enough Autoconf to choose the best grep 7518 -# available, choose the one first in the user's PATH. 7519 -m4_defun([_LT_DECL_EGREP], 7520 -[AC_REQUIRE([AC_PROG_EGREP])dnl 7521 -AC_REQUIRE([AC_PROG_FGREP])dnl 7522 -test -z "$GREP" && GREP=grep 7523 -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) 7524 -_LT_DECL([], [EGREP], [1], [An ERE matcher]) 7525 -_LT_DECL([], [FGREP], [1], [A literal string matcher]) 7526 -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too 7527 -AC_SUBST([GREP]) 7528 -]) 7529 - 7530 - 7531 -# _LT_DECL_OBJDUMP 7532 -# -------------- 7533 -# If we don't have a new enough Autoconf to choose the best objdump 7534 -# available, choose the one first in the user's PATH. 7535 -m4_defun([_LT_DECL_OBJDUMP], 7536 -[AC_CHECK_TOOL(OBJDUMP, objdump, false) 7537 -test -z "$OBJDUMP" && OBJDUMP=objdump 7538 -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) 7539 -AC_SUBST([OBJDUMP]) 7540 -]) 7541 - 7542 -# _LT_DECL_DLLTOOL 7543 -# ---------------- 7544 -# Ensure DLLTOOL variable is set. 7545 -m4_defun([_LT_DECL_DLLTOOL], 7546 -[AC_CHECK_TOOL(DLLTOOL, dlltool, false) 7547 -test -z "$DLLTOOL" && DLLTOOL=dlltool 7548 -_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) 7549 -AC_SUBST([DLLTOOL]) 7550 -]) 7551 - 7552 -# _LT_DECL_SED 7553 -# ------------ 7554 -# Check for a fully-functional sed program, that truncates 7555 -# as few characters as possible. Prefer GNU sed if found. 7556 -m4_defun([_LT_DECL_SED], 7557 -[AC_PROG_SED 7558 -test -z "$SED" && SED=sed 7559 -Xsed="$SED -e 1s/^X//" 7560 -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) 7561 -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], 7562 - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) 7563 -])# _LT_DECL_SED 7564 - 7565 -m4_ifndef([AC_PROG_SED], [ 7566 -# NOTE: This macro has been submitted for inclusion into # 7567 -# GNU Autoconf as AC_PROG_SED. When it is available in # 7568 -# a released version of Autoconf we should remove this # 7569 -# macro and use it instead. # 7570 - 7571 -m4_defun([AC_PROG_SED], 7572 -[AC_MSG_CHECKING([for a sed that does not truncate output]) 7573 -AC_CACHE_VAL(lt_cv_path_SED, 7574 -[# Loop through the user's path and test for sed and gsed. 7575 -# Then use that list of sed's as ones to test for truncation. 7576 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 7577 -for as_dir in $PATH 7578 -do 7579 - IFS=$as_save_IFS 7580 - test -z "$as_dir" && as_dir=. 7581 - for lt_ac_prog in sed gsed; do 7582 - for ac_exec_ext in '' $ac_executable_extensions; do 7583 - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then 7584 - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" 7585 - fi 7586 - done 7587 - done 7588 -done 7589 -IFS=$as_save_IFS 7590 -lt_ac_max=0 7591 -lt_ac_count=0 7592 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris 7593 -# along with /bin/sed that truncates output. 7594 -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do 7595 - test ! -f $lt_ac_sed && continue 7596 - cat /dev/null > conftest.in 7597 - lt_ac_count=0 7598 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in 7599 - # Check for GNU sed and select it if it is found. 7600 - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then 7601 - lt_cv_path_SED=$lt_ac_sed 7602 - break 7603 - fi 7604 - while true; do 7605 - cat conftest.in conftest.in >conftest.tmp 7606 - mv conftest.tmp conftest.in 7607 - cp conftest.in conftest.nl 7608 - echo >>conftest.nl 7609 - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break 7610 - cmp -s conftest.out conftest.nl || break 7611 - # 10000 chars as input seems more than enough 7612 - test $lt_ac_count -gt 10 && break 7613 - lt_ac_count=`expr $lt_ac_count + 1` 7614 - if test $lt_ac_count -gt $lt_ac_max; then 7615 - lt_ac_max=$lt_ac_count 7616 - lt_cv_path_SED=$lt_ac_sed 7617 - fi 7618 - done 7619 -done 7620 -]) 7621 -SED=$lt_cv_path_SED 7622 -AC_SUBST([SED]) 7623 -AC_MSG_RESULT([$SED]) 7624 -])#AC_PROG_SED 7625 -])#m4_ifndef 7626 - 7627 -# Old name: 7628 -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) 7629 -dnl aclocal-1.4 backwards compatibility: 7630 -dnl AC_DEFUN([LT_AC_PROG_SED], []) 7631 - 7632 - 7633 -# _LT_CHECK_SHELL_FEATURES 7634 -# ------------------------ 7635 -# Find out whether the shell is Bourne or XSI compatible, 7636 -# or has some other useful features. 7637 -m4_defun([_LT_CHECK_SHELL_FEATURES], 7638 -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) 7639 -# Try some XSI features 7640 -xsi_shell=no 7641 -( _lt_dummy="a/b/c" 7642 - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ 7643 - = c,a/b,b/c, \ 7644 - && eval 'test $(( 1 + 1 )) -eq 2 \ 7645 - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ 7646 - && xsi_shell=yes 7647 -AC_MSG_RESULT([$xsi_shell]) 7648 -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) 7649 - 7650 -AC_MSG_CHECKING([whether the shell understands "+="]) 7651 -lt_shell_append=no 7652 -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ 7653 - >/dev/null 2>&1 \ 7654 - && lt_shell_append=yes 7655 -AC_MSG_RESULT([$lt_shell_append]) 7656 -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) 7657 - 7658 -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then 7659 - lt_unset=unset 7660 -else 7661 - lt_unset=false 7662 -fi 7663 -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl 7664 - 7665 -# test EBCDIC or ASCII 7666 -case `echo X|tr X '\101'` in 7667 - A) # ASCII based system 7668 - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr 7669 - lt_SP2NL='tr \040 \012' 7670 - lt_NL2SP='tr \015\012 \040\040' 7671 - ;; 7672 - *) # EBCDIC based system 7673 - lt_SP2NL='tr \100 \n' 7674 - lt_NL2SP='tr \r\n \100\100' 7675 - ;; 7676 -esac 7677 -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl 7678 -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl 7679 -])# _LT_CHECK_SHELL_FEATURES 7680 - 7681 - 7682 -# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) 7683 -# ------------------------------------------------------ 7684 -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and 7685 -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. 7686 -m4_defun([_LT_PROG_FUNCTION_REPLACE], 7687 -[dnl { 7688 -sed -e '/^$1 ()$/,/^} # $1 /c\ 7689 -$1 ()\ 7690 -{\ 7691 -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) 7692 -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ 7693 - && mv -f "$cfgfile.tmp" "$cfgfile" \ 7694 - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") 7695 -test 0 -eq $? || _lt_function_replace_fail=: 7696 -]) 7697 - 7698 - 7699 -# _LT_PROG_REPLACE_SHELLFNS 7700 -# ------------------------- 7701 -# Replace existing portable implementations of several shell functions with 7702 -# equivalent extended shell implementations where those features are available.. 7703 -m4_defun([_LT_PROG_REPLACE_SHELLFNS], 7704 -[if test x"$xsi_shell" = xyes; then 7705 - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl 7706 - case ${1} in 7707 - */*) func_dirname_result="${1%/*}${2}" ;; 7708 - * ) func_dirname_result="${3}" ;; 7709 - esac]) 7710 - 7711 - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl 7712 - func_basename_result="${1##*/}"]) 7713 - 7714 - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl 7715 - case ${1} in 7716 - */*) func_dirname_result="${1%/*}${2}" ;; 7717 - * ) func_dirname_result="${3}" ;; 7718 - esac 7719 - func_basename_result="${1##*/}"]) 7720 - 7721 - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl 7722 - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 7723 - # positional parameters, so assign one to ordinary parameter first. 7724 - func_stripname_result=${3} 7725 - func_stripname_result=${func_stripname_result#"${1}"} 7726 - func_stripname_result=${func_stripname_result%"${2}"}]) 7727 - 7728 - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl 7729 - func_split_long_opt_name=${1%%=*} 7730 - func_split_long_opt_arg=${1#*=}]) 7731 - 7732 - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl 7733 - func_split_short_opt_arg=${1#??} 7734 - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) 7735 - 7736 - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl 7737 - case ${1} in 7738 - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; 7739 - *) func_lo2o_result=${1} ;; 7740 - esac]) 7741 - 7742 - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) 7743 - 7744 - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) 7745 - 7746 - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) 7747 -fi 7748 - 7749 -if test x"$lt_shell_append" = xyes; then 7750 - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) 7751 - 7752 - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl 7753 - func_quote_for_eval "${2}" 7754 -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ 7755 - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) 7756 - 7757 - # Save a `func_append' function call where possible by direct use of '+=' 7758 - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ 7759 - && mv -f "$cfgfile.tmp" "$cfgfile" \ 7760 - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") 7761 - test 0 -eq $? || _lt_function_replace_fail=: 7762 -else 7763 - # Save a `func_append' function call even when '+=' is not available 7764 - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ 7765 - && mv -f "$cfgfile.tmp" "$cfgfile" \ 7766 - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") 7767 - test 0 -eq $? || _lt_function_replace_fail=: 7768 -fi 7769 - 7770 -if test x"$_lt_function_replace_fail" = x":"; then 7771 - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) 7772 -fi 7773 -]) 7774 - 7775 -# _LT_PATH_CONVERSION_FUNCTIONS 7776 -# ----------------------------- 7777 -# Determine which file name conversion functions should be used by 7778 -# func_to_host_file (and, implicitly, by func_to_host_path). These are needed 7779 -# for certain cross-compile configurations and native mingw. 7780 -m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], 7781 -[AC_REQUIRE([AC_CANONICAL_HOST])dnl 7782 -AC_REQUIRE([AC_CANONICAL_BUILD])dnl 7783 -AC_MSG_CHECKING([how to convert $build file names to $host format]) 7784 -AC_CACHE_VAL(lt_cv_to_host_file_cmd, 7785 -[case $host in 7786 - *-*-mingw* ) 7787 - case $build in 7788 - *-*-mingw* ) # actually msys 7789 - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 7790 - ;; 7791 - *-*-cygwin* ) 7792 - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 7793 - ;; 7794 - * ) # otherwise, assume *nix 7795 - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 7796 - ;; 7797 - esac 7798 - ;; 7799 - *-*-cygwin* ) 7800 - case $build in 7801 - *-*-mingw* ) # actually msys 7802 - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin 7803 - ;; 7804 - *-*-cygwin* ) 7805 - lt_cv_to_host_file_cmd=func_convert_file_noop 7806 - ;; 7807 - * ) # otherwise, assume *nix 7808 - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin 7809 - ;; 7810 - esac 7811 - ;; 7812 - * ) # unhandled hosts (and "normal" native builds) 7813 - lt_cv_to_host_file_cmd=func_convert_file_noop 7814 - ;; 7815 -esac 7816 -]) 7817 -to_host_file_cmd=$lt_cv_to_host_file_cmd 7818 -AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) 7819 -_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], 7820 - [0], [convert $build file names to $host format])dnl 7821 - 7822 -AC_MSG_CHECKING([how to convert $build file names to toolchain format]) 7823 -AC_CACHE_VAL(lt_cv_to_tool_file_cmd, 7824 -[#assume ordinary cross tools, or native build. 7825 -lt_cv_to_tool_file_cmd=func_convert_file_noop 7826 -case $host in 7827 - *-*-mingw* ) 7828 - case $build in 7829 - *-*-mingw* ) # actually msys 7830 - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 7831 - ;; 7832 - esac 7833 - ;; 7834 -esac 7835 -]) 7836 -to_tool_file_cmd=$lt_cv_to_tool_file_cmd 7837 -AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) 7838 -_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], 7839 - [0], [convert $build files to toolchain format])dnl 7840 -])# _LT_PATH_CONVERSION_FUNCTIONS 7841 - 7842 -# Helper functions for option handling. -*- Autoconf -*- 7843 -# 7844 -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, 7845 -# Inc. 7846 -# Written by Gary V. Vaughan, 2004 7847 -# 7848 -# This file is free software; the Free Software Foundation gives 7849 -# unlimited permission to copy and/or distribute it, with or without 7850 -# modifications, as long as this notice is preserved. 7851 - 7852 -# serial 7 ltoptions.m4 7853 - 7854 -# This is to help aclocal find these macros, as it can't see m4_define. 7855 -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) 7856 - 7857 - 7858 -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) 7859 -# ------------------------------------------ 7860 -m4_define([_LT_MANGLE_OPTION], 7861 -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) 7862 - 7863 - 7864 -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) 7865 -# --------------------------------------- 7866 -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a 7867 -# matching handler defined, dispatch to it. Other OPTION-NAMEs are 7868 -# saved as a flag. 7869 -m4_define([_LT_SET_OPTION], 7870 -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl 7871 -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), 7872 - _LT_MANGLE_DEFUN([$1], [$2]), 7873 - [m4_warning([Unknown $1 option `$2'])])[]dnl 7874 -]) 7875 - 7876 - 7877 -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) 7878 -# ------------------------------------------------------------ 7879 -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. 7880 -m4_define([_LT_IF_OPTION], 7881 -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) 7882 - 7883 - 7884 -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) 7885 -# ------------------------------------------------------- 7886 -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME 7887 -# are set. 7888 -m4_define([_LT_UNLESS_OPTIONS], 7889 -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), 7890 - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), 7891 - [m4_define([$0_found])])])[]dnl 7892 -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 7893 -])[]dnl 7894 -]) 7895 - 7896 - 7897 -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) 7898 -# ---------------------------------------- 7899 -# OPTION-LIST is a space-separated list of Libtool options associated 7900 -# with MACRO-NAME. If any OPTION has a matching handler declared with 7901 -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about 7902 -# the unknown option and exit. 7903 -m4_defun([_LT_SET_OPTIONS], 7904 -[# Set options 7905 -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), 7906 - [_LT_SET_OPTION([$1], _LT_Option)]) 7907 - 7908 -m4_if([$1],[LT_INIT],[ 7909 - dnl 7910 - dnl Simply set some default values (i.e off) if boolean options were not 7911 - dnl specified: 7912 - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no 7913 - ]) 7914 - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no 7915 - ]) 7916 - dnl 7917 - dnl If no reference was made to various pairs of opposing options, then 7918 - dnl we run the default mode handler for the pair. For example, if neither 7919 - dnl `shared' nor `disable-shared' was passed, we enable building of shared 7920 - dnl archives by default: 7921 - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) 7922 - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) 7923 - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) 7924 - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], 7925 - [_LT_ENABLE_FAST_INSTALL]) 7926 - ]) 7927 -])# _LT_SET_OPTIONS 7928 - 7929 - 7930 - 7931 -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) 7932 -# ----------------------------------------- 7933 -m4_define([_LT_MANGLE_DEFUN], 7934 -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) 7935 - 7936 - 7937 -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) 7938 -# ----------------------------------------------- 7939 -m4_define([LT_OPTION_DEFINE], 7940 -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl 7941 -])# LT_OPTION_DEFINE 7942 - 7943 - 7944 -# dlopen 7945 -# ------ 7946 -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes 7947 -]) 7948 - 7949 -AU_DEFUN([AC_LIBTOOL_DLOPEN], 7950 -[_LT_SET_OPTION([LT_INIT], [dlopen]) 7951 -AC_DIAGNOSE([obsolete], 7952 -[$0: Remove this warning and the call to _LT_SET_OPTION when you 7953 -put the `dlopen' option into LT_INIT's first parameter.]) 7954 -]) 7955 - 7956 -dnl aclocal-1.4 backwards compatibility: 7957 -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) 7958 - 7959 - 7960 -# win32-dll 7961 -# --------- 7962 -# Declare package support for building win32 dll's. 7963 -LT_OPTION_DEFINE([LT_INIT], [win32-dll], 7964 -[enable_win32_dll=yes 7965 - 7966 -case $host in 7967 -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) 7968 - AC_CHECK_TOOL(AS, as, false) 7969 - AC_CHECK_TOOL(DLLTOOL, dlltool, false) 7970 - AC_CHECK_TOOL(OBJDUMP, objdump, false) 7971 - ;; 7972 -esac 7973 - 7974 -test -z "$AS" && AS=as 7975 -_LT_DECL([], [AS], [1], [Assembler program])dnl 7976 - 7977 -test -z "$DLLTOOL" && DLLTOOL=dlltool 7978 -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl 7979 - 7980 -test -z "$OBJDUMP" && OBJDUMP=objdump 7981 -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl 7982 -])# win32-dll 7983 - 7984 -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], 7985 -[AC_REQUIRE([AC_CANONICAL_HOST])dnl 7986 -_LT_SET_OPTION([LT_INIT], [win32-dll]) 7987 -AC_DIAGNOSE([obsolete], 7988 -[$0: Remove this warning and the call to _LT_SET_OPTION when you 7989 -put the `win32-dll' option into LT_INIT's first parameter.]) 7990 -]) 7991 - 7992 -dnl aclocal-1.4 backwards compatibility: 7993 -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) 7994 - 7995 - 7996 -# _LT_ENABLE_SHARED([DEFAULT]) 7997 -# ---------------------------- 7998 -# implement the --enable-shared flag, and supports the `shared' and 7999 -# `disable-shared' LT_INIT options. 8000 -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. 8001 -m4_define([_LT_ENABLE_SHARED], 8002 -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl 8003 -AC_ARG_ENABLE([shared], 8004 - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], 8005 - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], 8006 - [p=${PACKAGE-default} 8007 - case $enableval in 8008 - yes) enable_shared=yes ;; 8009 - no) enable_shared=no ;; 8010 - *) 8011 - enable_shared=no 8012 - # Look at the argument we got. We use all the common list separators. 8013 - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," 8014 - for pkg in $enableval; do 8015 - IFS="$lt_save_ifs" 8016 - if test "X$pkg" = "X$p"; then 8017 - enable_shared=yes 8018 - fi 8019 - done 8020 - IFS="$lt_save_ifs" 8021 - ;; 8022 - esac], 8023 - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) 8024 - 8025 - _LT_DECL([build_libtool_libs], [enable_shared], [0], 8026 - [Whether or not to build shared libraries]) 8027 -])# _LT_ENABLE_SHARED 8028 - 8029 -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) 8030 -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) 8031 - 8032 -# Old names: 8033 -AC_DEFUN([AC_ENABLE_SHARED], 8034 -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) 8035 -]) 8036 - 8037 -AC_DEFUN([AC_DISABLE_SHARED], 8038 -[_LT_SET_OPTION([LT_INIT], [disable-shared]) 8039 -]) 8040 - 8041 -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) 8042 -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) 8043 - 8044 -dnl aclocal-1.4 backwards compatibility: 8045 -dnl AC_DEFUN([AM_ENABLE_SHARED], []) 8046 -dnl AC_DEFUN([AM_DISABLE_SHARED], []) 8047 - 8048 - 8049 - 8050 -# _LT_ENABLE_STATIC([DEFAULT]) 8051 -# ---------------------------- 8052 -# implement the --enable-static flag, and support the `static' and 8053 -# `disable-static' LT_INIT options. 8054 -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. 8055 -m4_define([_LT_ENABLE_STATIC], 8056 -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl 8057 -AC_ARG_ENABLE([static], 8058 - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], 8059 - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], 8060 - [p=${PACKAGE-default} 8061 - case $enableval in 8062 - yes) enable_static=yes ;; 8063 - no) enable_static=no ;; 8064 - *) 8065 - enable_static=no 8066 - # Look at the argument we got. We use all the common list separators. 8067 - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," 8068 - for pkg in $enableval; do 8069 - IFS="$lt_save_ifs" 8070 - if test "X$pkg" = "X$p"; then 8071 - enable_static=yes 8072 - fi 8073 - done 8074 - IFS="$lt_save_ifs" 8075 - ;; 8076 - esac], 8077 - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) 8078 - 8079 - _LT_DECL([build_old_libs], [enable_static], [0], 8080 - [Whether or not to build static libraries]) 8081 -])# _LT_ENABLE_STATIC 8082 - 8083 -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) 8084 -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) 8085 - 8086 -# Old names: 8087 -AC_DEFUN([AC_ENABLE_STATIC], 8088 -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) 8089 -]) 8090 - 8091 -AC_DEFUN([AC_DISABLE_STATIC], 8092 -[_LT_SET_OPTION([LT_INIT], [disable-static]) 8093 -]) 8094 - 8095 -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) 8096 -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) 8097 - 8098 -dnl aclocal-1.4 backwards compatibility: 8099 -dnl AC_DEFUN([AM_ENABLE_STATIC], []) 8100 -dnl AC_DEFUN([AM_DISABLE_STATIC], []) 8101 - 8102 - 8103 - 8104 -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) 8105 -# ---------------------------------- 8106 -# implement the --enable-fast-install flag, and support the `fast-install' 8107 -# and `disable-fast-install' LT_INIT options. 8108 -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. 8109 -m4_define([_LT_ENABLE_FAST_INSTALL], 8110 -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl 8111 -AC_ARG_ENABLE([fast-install], 8112 - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], 8113 - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], 8114 - [p=${PACKAGE-default} 8115 - case $enableval in 8116 - yes) enable_fast_install=yes ;; 8117 - no) enable_fast_install=no ;; 8118 - *) 8119 - enable_fast_install=no 8120 - # Look at the argument we got. We use all the common list separators. 8121 - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," 8122 - for pkg in $enableval; do 8123 - IFS="$lt_save_ifs" 8124 - if test "X$pkg" = "X$p"; then 8125 - enable_fast_install=yes 8126 - fi 8127 - done 8128 - IFS="$lt_save_ifs" 8129 - ;; 8130 - esac], 8131 - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) 8132 - 8133 -_LT_DECL([fast_install], [enable_fast_install], [0], 8134 - [Whether or not to optimize for fast installation])dnl 8135 -])# _LT_ENABLE_FAST_INSTALL 8136 - 8137 -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) 8138 -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) 8139 - 8140 -# Old names: 8141 -AU_DEFUN([AC_ENABLE_FAST_INSTALL], 8142 -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) 8143 -AC_DIAGNOSE([obsolete], 8144 -[$0: Remove this warning and the call to _LT_SET_OPTION when you put 8145 -the `fast-install' option into LT_INIT's first parameter.]) 8146 -]) 8147 - 8148 -AU_DEFUN([AC_DISABLE_FAST_INSTALL], 8149 -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) 8150 -AC_DIAGNOSE([obsolete], 8151 -[$0: Remove this warning and the call to _LT_SET_OPTION when you put 8152 -the `disable-fast-install' option into LT_INIT's first parameter.]) 8153 -]) 8154 - 8155 -dnl aclocal-1.4 backwards compatibility: 8156 -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) 8157 -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) 8158 - 8159 - 8160 -# _LT_WITH_PIC([MODE]) 8161 -# -------------------- 8162 -# implement the --with-pic flag, and support the `pic-only' and `no-pic' 8163 -# LT_INIT options. 8164 -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. 8165 -m4_define([_LT_WITH_PIC], 8166 -[AC_ARG_WITH([pic], 8167 - [AS_HELP_STRING([--with-pic], 8168 - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], 8169 - [pic_mode="$withval"], 8170 - [pic_mode=default]) 8171 - 8172 -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) 8173 - 8174 -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl 8175 -])# _LT_WITH_PIC 8176 - 8177 -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) 8178 -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) 8179 - 8180 -# Old name: 8181 -AU_DEFUN([AC_LIBTOOL_PICMODE], 8182 -[_LT_SET_OPTION([LT_INIT], [pic-only]) 8183 -AC_DIAGNOSE([obsolete], 8184 -[$0: Remove this warning and the call to _LT_SET_OPTION when you 8185 -put the `pic-only' option into LT_INIT's first parameter.]) 8186 -]) 8187 - 8188 -dnl aclocal-1.4 backwards compatibility: 8189 -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) 8190 - 8191 - 8192 -m4_define([_LTDL_MODE], []) 8193 -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], 8194 - [m4_define([_LTDL_MODE], [nonrecursive])]) 8195 -LT_OPTION_DEFINE([LTDL_INIT], [recursive], 8196 - [m4_define([_LTDL_MODE], [recursive])]) 8197 -LT_OPTION_DEFINE([LTDL_INIT], [subproject], 8198 - [m4_define([_LTDL_MODE], [subproject])]) 8199 - 8200 -m4_define([_LTDL_TYPE], []) 8201 -LT_OPTION_DEFINE([LTDL_INIT], [installable], 8202 - [m4_define([_LTDL_TYPE], [installable])]) 8203 -LT_OPTION_DEFINE([LTDL_INIT], [convenience], 8204 - [m4_define([_LTDL_TYPE], [convenience])]) 8205 - 8206 -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- 8207 -# 8208 -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. 8209 -# Written by Gary V. Vaughan, 2004 8210 -# 8211 -# This file is free software; the Free Software Foundation gives 8212 -# unlimited permission to copy and/or distribute it, with or without 8213 -# modifications, as long as this notice is preserved. 8214 - 8215 -# serial 6 ltsugar.m4 8216 - 8217 -# This is to help aclocal find these macros, as it can't see m4_define. 8218 -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) 8219 - 8220 - 8221 -# lt_join(SEP, ARG1, [ARG2...]) 8222 -# ----------------------------- 8223 -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their 8224 -# associated separator. 8225 -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier 8226 -# versions in m4sugar had bugs. 8227 -m4_define([lt_join], 8228 -[m4_if([$#], [1], [], 8229 - [$#], [2], [[$2]], 8230 - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) 8231 -m4_define([_lt_join], 8232 -[m4_if([$#$2], [2], [], 8233 - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) 8234 - 8235 - 8236 -# lt_car(LIST) 8237 -# lt_cdr(LIST) 8238 -# ------------ 8239 -# Manipulate m4 lists. 8240 -# These macros are necessary as long as will still need to support 8241 -# Autoconf-2.59 which quotes differently. 8242 -m4_define([lt_car], [[$1]]) 8243 -m4_define([lt_cdr], 8244 -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], 8245 - [$#], 1, [], 8246 - [m4_dquote(m4_shift($@))])]) 8247 -m4_define([lt_unquote], $1) 8248 - 8249 - 8250 -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) 8251 -# ------------------------------------------ 8252 -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. 8253 -# Note that neither SEPARATOR nor STRING are expanded; they are appended 8254 -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). 8255 -# No SEPARATOR is output if MACRO-NAME was previously undefined (different 8256 -# than defined and empty). 8257 -# 8258 -# This macro is needed until we can rely on Autoconf 2.62, since earlier 8259 -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. 8260 -m4_define([lt_append], 8261 -[m4_define([$1], 8262 - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) 8263 - 8264 - 8265 - 8266 -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) 8267 -# ---------------------------------------------------------- 8268 -# Produce a SEP delimited list of all paired combinations of elements of 8269 -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list 8270 -# has the form PREFIXmINFIXSUFFIXn. 8271 -# Needed until we can rely on m4_combine added in Autoconf 2.62. 8272 -m4_define([lt_combine], 8273 -[m4_if(m4_eval([$# > 3]), [1], 8274 - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl 8275 -[[m4_foreach([_Lt_prefix], [$2], 8276 - [m4_foreach([_Lt_suffix], 8277 - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, 8278 - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) 8279 - 8280 - 8281 -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) 8282 -# ----------------------------------------------------------------------- 8283 -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited 8284 -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. 8285 -m4_define([lt_if_append_uniq], 8286 -[m4_ifdef([$1], 8287 - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], 8288 - [lt_append([$1], [$2], [$3])$4], 8289 - [$5])], 8290 - [lt_append([$1], [$2], [$3])$4])]) 8291 - 8292 - 8293 -# lt_dict_add(DICT, KEY, VALUE) 8294 -# ----------------------------- 8295 -m4_define([lt_dict_add], 8296 -[m4_define([$1($2)], [$3])]) 8297 - 8298 - 8299 -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) 8300 -# -------------------------------------------- 8301 -m4_define([lt_dict_add_subkey], 8302 -[m4_define([$1($2:$3)], [$4])]) 8303 - 8304 - 8305 -# lt_dict_fetch(DICT, KEY, [SUBKEY]) 8306 -# ---------------------------------- 8307 -m4_define([lt_dict_fetch], 8308 -[m4_ifval([$3], 8309 - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), 8310 - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) 8311 - 8312 - 8313 -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) 8314 -# ----------------------------------------------------------------- 8315 -m4_define([lt_if_dict_fetch], 8316 -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], 8317 - [$5], 8318 - [$6])]) 8319 - 8320 - 8321 -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) 8322 -# -------------------------------------------------------------- 8323 -m4_define([lt_dict_filter], 8324 -[m4_if([$5], [], [], 8325 - [lt_join(m4_quote(m4_default([$4], [[, ]])), 8326 - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), 8327 - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl 8328 -]) 8329 - 8330 -# ltversion.m4 -- version numbers -*- Autoconf -*- 8331 -# 8332 -# Copyright (C) 2004 Free Software Foundation, Inc. 8333 -# Written by Scott James Remnant, 2004 8334 -# 8335 -# This file is free software; the Free Software Foundation gives 8336 -# unlimited permission to copy and/or distribute it, with or without 8337 -# modifications, as long as this notice is preserved. 8338 - 8339 -# @configure_input@ 8340 - 8341 -# serial 3293 ltversion.m4 8342 -# This file is part of GNU Libtool 8343 - 8344 -m4_define([LT_PACKAGE_VERSION], [2.4]) 8345 -m4_define([LT_PACKAGE_REVISION], [1.3293]) 8346 - 8347 -AC_DEFUN([LTVERSION_VERSION], 8348 -[macro_version='2.4' 8349 -macro_revision='1.3293' 8350 -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) 8351 -_LT_DECL(, macro_revision, 0) 8352 -]) 8353 - 8354 -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- 8355 -# 8356 -# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. 8357 -# Written by Scott James Remnant, 2004. 8358 -# 8359 -# This file is free software; the Free Software Foundation gives 8360 -# unlimited permission to copy and/or distribute it, with or without 8361 -# modifications, as long as this notice is preserved. 8362 - 8363 -# serial 5 lt~obsolete.m4 8364 - 8365 -# These exist entirely to fool aclocal when bootstrapping libtool. 8366 -# 8367 -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) 8368 -# which have later been changed to m4_define as they aren't part of the 8369 -# exported API, or moved to Autoconf or Automake where they belong. 8370 -# 8371 -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN 8372 -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us 8373 -# using a macro with the same name in our local m4/libtool.m4 it'll 8374 -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define 8375 -# and doesn't know about Autoconf macros at all.) 8376 -# 8377 -# So we provide this file, which has a silly filename so it's always 8378 -# included after everything else. This provides aclocal with the 8379 -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything 8380 -# because those macros already exist, or will be overwritten later. 8381 -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 8382 -# 8383 -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. 8384 -# Yes, that means every name once taken will need to remain here until 8385 -# we give up compatibility with versions before 1.7, at which point 8386 -# we need to keep only those names which we still refer to. 8387 - 8388 -# This is to help aclocal find these macros, as it can't see m4_define. 8389 -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) 8390 - 8391 -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) 8392 -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) 8393 -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) 8394 -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) 8395 -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) 8396 -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) 8397 -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) 8398 -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) 8399 -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) 8400 -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) 8401 -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) 8402 -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) 8403 -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) 8404 -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) 8405 -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) 8406 -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) 8407 -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) 8408 -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) 8409 -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) 8410 -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) 8411 -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) 8412 -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) 8413 -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) 8414 -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) 8415 -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) 8416 -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) 8417 -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) 8418 -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) 8419 -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) 8420 -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) 8421 -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) 8422 -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) 8423 -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) 8424 -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) 8425 -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) 8426 -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) 8427 -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) 8428 -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) 8429 -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) 8430 -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) 8431 -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) 8432 -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) 8433 -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) 8434 -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) 8435 -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) 8436 -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) 8437 -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) 8438 -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) 8439 -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) 8440 -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) 8441 -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) 8442 -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) 8443 -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) 8444 -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) 8445 -m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) 8446 -m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) 8447 -m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) 8448 -m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) 8449 -m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) 8450 -m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) 8451 -m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) 8452 - 8453 22 # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- 8454 23 # serial 1 (pkg-config-0.24) 8455 24 # 8456 25 # Copyright © 2004 Scott James Remnant <scott@netsplit.com>. 8457 26 # 8458 27 # This program is free software; you can redistribute it and/or modify 8459 28 # it under the terms of the GNU General Public License as published by ................................................................................ 9586 1155 9587 1156 AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) 9588 1157 AC_MSG_RESULT([$am_cv_prog_tar_$1])]) 9589 1158 AC_SUBST([am__tar]) 9590 1159 AC_SUBST([am__untar]) 9591 1160 ]) # _AM_PROG_TAR 9592 1161 1162 +m4_include([m4/libtool.m4]) 1163 +m4_include([m4/ltoptions.m4]) 1164 +m4_include([m4/ltsugar.m4]) 1165 +m4_include([m4/ltversion.m4]) 1166 +m4_include([m4/lt~obsolete.m4])
Changes to config.h.
1 1 /* config.h. Generated from config.h.in by configure. */ 2 2 /* config.h.in. Generated from configure.ac by autoheader. */ 3 3 4 4 /* Define to 1 if you have the <dlfcn.h> header file. */ 5 5 #define HAVE_DLFCN_H 1 6 + 7 +/* Define to 1 if you have the <expat.h> header file. */ 8 +#define HAVE_EXPAT_H 1 6 9 7 10 /* Define to 1 if you have the <fcntl.h> header file. */ 8 11 #define HAVE_FCNTL_H 1 9 12 10 13 /* Define to 1 if you have the `fdatasync' function. */ 11 14 #define HAVE_FDATASYNC 1 12 15 ................................................................................ 122 125 /* Define to the address where bug reports for this package should be sent. */ 123 126 #define PACKAGE_BUGREPORT "a.furieri@lqt.it" 124 127 125 128 /* Define to the full name of this package. */ 126 129 #define PACKAGE_NAME "spatialite-tools" 127 130 128 131 /* Define to the full name and version of this package. */ 129 -#define PACKAGE_STRING "spatialite-tools 3.1.0" 132 +#define PACKAGE_STRING "spatialite-tools 3.0.1" 130 133 131 134 /* Define to the one symbol short name of this package. */ 132 135 #define PACKAGE_TARNAME "spatialite-tools" 133 136 134 137 /* Define to the home page for this package. */ 135 138 #define PACKAGE_URL "" 136 139 137 140 /* Define to the version of this package. */ 138 -#define PACKAGE_VERSION "3.1.0" 141 +#define PACKAGE_VERSION "3.0.1" 139 142 140 143 /* Define to 1 if you have the ANSI C header files. */ 141 144 #define STDC_HEADERS 1 142 145 143 146 /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ 144 147 #define TIME_WITH_SYS_TIME 1 145 148 146 149 /* Define to 1 if your <sys/time.h> declares `struct tm'. */ 147 150 /* #undef TM_IN_SYS_TIME */ 148 151 149 152 /* Version number of package */ 150 -#define VERSION "3.1.0" 153 +#define VERSION "3.0.1" 151 154 152 155 /* Define to empty if `const' does not conform to ANSI C. */ 153 156 /* #undef const */ 154 157 155 158 /* Define to `long int' if <sys/types.h> does not define. */ 156 159 /* #undef off_t */ 157 160 158 161 /* Define to `unsigned int' if <sys/types.h> does not define. */ 159 162 /* #undef size_t */ 160 163 161 164 /* Define to empty if the keyword `volatile' does not work. Warning: valid 162 165 code using `volatile' can become incorrect without. Disable with care. */ 163 166 /* #undef volatile */
Changes to config.h.in.
1 1 /* config.h.in. Generated from configure.ac by autoheader. */ 2 2 3 3 /* Define to 1 if you have the <dlfcn.h> header file. */ 4 4 #undef HAVE_DLFCN_H 5 + 6 +/* Define to 1 if you have the <expat.h> header file. */ 7 +#undef HAVE_EXPAT_H 5 8 6 9 /* Define to 1 if you have the <fcntl.h> header file. */ 7 10 #undef HAVE_FCNTL_H 8 11 9 12 /* Define to 1 if you have the `fdatasync' function. */ 10 13 #undef HAVE_FDATASYNC 11 14
Changes to configure.
1 1 #! /bin/sh 2 2 # Guess values for system-dependent variables and create Makefiles. 3 -# Generated by GNU Autoconf 2.68 for spatialite-tools 3.1.0. 3 +# Generated by GNU Autoconf 2.68 for spatialite-tools 3.0.1. 4 4 # 5 5 # Report bugs to <a.furieri@lqt.it>. 6 6 # 7 7 # 8 8 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 9 9 # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software 10 10 # Foundation, Inc. ................................................................................ 566 566 subdirs= 567 567 MFLAGS= 568 568 MAKEFLAGS= 569 569 570 570 # Identity of this package. 571 571 PACKAGE_NAME='spatialite-tools' 572 572 PACKAGE_TARNAME='spatialite-tools' 573 -PACKAGE_VERSION='3.1.0' 574 -PACKAGE_STRING='spatialite-tools 3.1.0' 573 +PACKAGE_VERSION='3.0.1' 574 +PACKAGE_STRING='spatialite-tools 3.0.1' 575 575 PACKAGE_BUGREPORT='a.furieri@lqt.it' 576 576 PACKAGE_URL='' 577 577 578 578 # Factoring default headers for most tests. 579 579 ac_includes_default="\ 580 580 #include <stdio.h> 581 581 #ifdef HAVE_SYS_TYPES_H ................................................................................ 610 610 #ifdef HAVE_UNISTD_H 611 611 # include <unistd.h> 612 612 #endif" 613 613 614 614 ac_subst_vars='am__EXEEXT_FALSE 615 615 am__EXEEXT_TRUE 616 616 LTLIBOBJS 617 -LIBREADOSM_CFLAGS 618 -LIBREADOSM_LIBS 619 617 LIBFREEXL_LIBS 620 618 LIBFREEXL_CFLAGS 621 619 LIBSPATIALITE_LIBS 622 620 LIBSPATIALITE_CFLAGS 623 621 PKG_CONFIG_LIBDIR 624 622 PKG_CONFIG_PATH 625 623 PKG_CONFIG ................................................................................ 776 774 CXXCPP 777 775 PKG_CONFIG 778 776 PKG_CONFIG_PATH 779 777 PKG_CONFIG_LIBDIR 780 778 LIBSPATIALITE_CFLAGS 781 779 LIBSPATIALITE_LIBS 782 780 LIBFREEXL_CFLAGS 783 -LIBFREEXL_LIBS 784 -LIBREADOSM_CFLAGS 785 -LIBREADOSM_LIBS' 781 +LIBFREEXL_LIBS' 786 782 787 783 788 784 # Initialize some variables set by options. 789 785 ac_init_help= 790 786 ac_init_version=false 791 787 ac_unrecognized_opts= 792 788 ac_unrecognized_sep= ................................................................................ 1321 1317 # 1322 1318 # Report the --help message. 1323 1319 # 1324 1320 if test "$ac_init_help" = "long"; then 1325 1321 # Omit some internal or obsolete options to make the list less imposing. 1326 1322 # This message is too long to be a string in the A/UX 3.1 sh. 1327 1323 cat <<_ACEOF 1328 -\`configure' configures spatialite-tools 3.1.0 to adapt to many kinds of systems. 1324 +\`configure' configures spatialite-tools 3.0.1 to adapt to many kinds of systems. 1329 1325 1330 1326 Usage: $0 [OPTION]... [VAR=VALUE]... 1331 1327 1332 1328 To assign environment variables (e.g., CC, CFLAGS...), specify them as 1333 1329 VAR=VALUE. See below for descriptions of some of the useful variables. 1334 1330 1335 1331 Defaults for the options are specified in brackets. ................................................................................ 1392 1388 --build=BUILD configure for building on BUILD [guessed] 1393 1389 --host=HOST cross-compile to build programs to run on HOST [BUILD] 1394 1390 _ACEOF 1395 1391 fi 1396 1392 1397 1393 if test -n "$ac_init_help"; then 1398 1394 case $ac_init_help in 1399 - short | recursive ) echo "Configuration of spatialite-tools 3.1.0:";; 1395 + short | recursive ) echo "Configuration of spatialite-tools 3.0.1:";; 1400 1396 esac 1401 1397 cat <<\_ACEOF 1402 1398 1403 1399 Optional Features: 1404 1400 --disable-option-checking ignore unrecognized --enable/--with options 1405 1401 --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) 1406 1402 --enable-FEATURE[=ARG] include FEATURE [ARG=yes] ................................................................................ 1446 1442 C compiler flags for LIBSPATIALITE, overriding pkg-config 1447 1443 LIBSPATIALITE_LIBS 1448 1444 linker flags for LIBSPATIALITE, overriding pkg-config 1449 1445 LIBFREEXL_CFLAGS 1450 1446 C compiler flags for LIBFREEXL, overriding pkg-config 1451 1447 LIBFREEXL_LIBS 1452 1448 linker flags for LIBFREEXL, overriding pkg-config 1453 - LIBREADOSM_CFLAGS 1454 - C compiler flags for LIBREADOSM, overriding pkg-config 1455 - LIBREADOSM_LIBS 1456 - linker flags for LIBREADOSM, overriding pkg-config 1457 1449 1458 1450 Use these variables to override the choices made by `configure' or to help 1459 1451 it to find libraries and programs with nonstandard names/locations. 1460 1452 1461 1453 Report bugs to <a.furieri@lqt.it>. 1462 1454 _ACEOF 1463 1455 ac_status=$? ................................................................................ 1517 1509 cd "$ac_pwd" || { ac_status=$?; break; } 1518 1510 done 1519 1511 fi 1520 1512 1521 1513 test -n "$ac_init_help" && exit $ac_status 1522 1514 if $ac_init_version; then 1523 1515 cat <<\_ACEOF 1524 -spatialite-tools configure 3.1.0 1516 +spatialite-tools configure 3.0.1 1525 1517 generated by GNU Autoconf 2.68 1526 1518 1527 1519 Copyright (C) 2010 Free Software Foundation, Inc. 1528 1520 This configure script is free software; the Free Software Foundation 1529 1521 gives unlimited permission to copy, distribute and modify it. 1530 1522 _ACEOF 1531 1523 exit ................................................................................ 2061 2053 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno 2062 2054 2063 2055 } # ac_fn_c_check_type 2064 2056 cat >config.log <<_ACEOF 2065 2057 This file contains any messages produced by compilers while 2066 2058 running configure, to aid debugging if configure makes a mistake. 2067 2059 2068 -It was created by spatialite-tools $as_me 3.1.0, which was 2060 +It was created by spatialite-tools $as_me 3.0.1, which was 2069 2061 generated by GNU Autoconf 2.68. Invocation command line was 2070 2062 2071 2063 $ $0 $@ 2072 2064 2073 2065 _ACEOF 2074 2066 exec 5>>config.log 2075 2067 { ................................................................................ 2884 2876 CYGPATH_W=echo 2885 2877 fi 2886 2878 fi 2887 2879 2888 2880 2889 2881 # Define the identity of the package. 2890 2882 PACKAGE='spatialite-tools' 2891 - VERSION='3.1.0' 2883 + VERSION='3.0.1' 2892 2884 2893 2885 2894 2886 cat >>confdefs.h <<_ACEOF 2895 2887 #define PACKAGE "$PACKAGE" 2896 2888 _ACEOF 2897 2889 2898 2890 ................................................................................ 4493 4485 cat >>confdefs.h <<_ACEOF 4494 4486 #define HAVE_UNISTD_H 1 4495 4487 _ACEOF 4496 4488 4497 4489 else 4498 4490 as_fn_error $? "cannot find unistd.h, bailing out" "$LINENO" 5 4499 4491 fi 4492 + 4493 +done 4494 + 4495 +for ac_header in expat.h 4496 +do : 4497 + ac_fn_c_check_header_mongrel "$LINENO" "expat.h" "ac_cv_header_expat_h" "$ac_includes_default" 4498 +if test "x$ac_cv_header_expat_h" = xyes; then : 4499 + cat >>confdefs.h <<_ACEOF 4500 +#define HAVE_EXPAT_H 1 4501 +_ACEOF 4502 + 4503 +else 4504 + as_fn_error $? "cannot find expat.h, bailing out" "$LINENO" 5 4505 +fi 4500 4506 4501 4507 done 4502 4508 4503 4509 4504 4510 # Checks for programs. 4505 4511 ac_ext=cpp 4506 4512 ac_cpp='$CXXCPP $CPPFLAGS' ................................................................................ 9617 9623 ac_outfile=conftest.$ac_objext 9618 9624 echo "$lt_simple_link_test_code" >conftest.$ac_ext 9619 9625 eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err 9620 9626 _lt_linker_boilerplate=`cat conftest.err` 9621 9627 $RM -r conftest* 9622 9628 9623 9629 9630 +## CAVEAT EMPTOR: 9631 +## There is no encapsulation within the following macros, do not change 9632 +## the running order or otherwise move them around unless you know exactly 9633 +## what you are doing... 9624 9634 if test -n "$compiler"; then 9625 9635 9626 9636 lt_prog_compiler_no_builtin_flag= 9627 9637 9628 9638 if test "$GCC" = yes; then 9629 9639 case $cc_basename in 9630 9640 nvcc*) ................................................................................ 17561 17571 LIBFREEXL_CFLAGS=$pkg_cv_LIBFREEXL_CFLAGS 17562 17572 LIBFREEXL_LIBS=$pkg_cv_LIBFREEXL_LIBS 17563 17573 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 17564 17574 $as_echo "yes" >&6; } 17565 17575 17566 17576 fi 17567 17577 17568 - 17569 -pkg_failed=no 17570 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBREADOSM" >&5 17571 -$as_echo_n "checking for LIBREADOSM... " >&6; } 17572 - 17573 -if test -n "$LIBREADOSM_CFLAGS"; then 17574 - pkg_cv_LIBREADOSM_CFLAGS="$LIBREADOSM_CFLAGS" 17575 - elif test -n "$PKG_CONFIG"; then 17576 - if test -n "$PKG_CONFIG" && \ 17577 - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"readosm\""; } >&5 17578 - ($PKG_CONFIG --exists --print-errors "readosm") 2>&5 17579 - ac_status=$? 17580 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 17581 - test $ac_status = 0; }; then 17582 - pkg_cv_LIBREADOSM_CFLAGS=`$PKG_CONFIG --cflags "readosm" 2>/dev/null` 17583 -else 17584 - pkg_failed=yes 17585 -fi 17586 - else 17587 - pkg_failed=untried 17588 -fi 17589 -if test -n "$LIBREADOSM_LIBS"; then 17590 - pkg_cv_LIBREADOSM_LIBS="$LIBREADOSM_LIBS" 17591 - elif test -n "$PKG_CONFIG"; then 17592 - if test -n "$PKG_CONFIG" && \ 17593 - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"readosm\""; } >&5 17594 - ($PKG_CONFIG --exists --print-errors "readosm") 2>&5 17595 - ac_status=$? 17596 - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 17597 - test $ac_status = 0; }; then 17598 - pkg_cv_LIBREADOSM_LIBS=`$PKG_CONFIG --libs "readosm" 2>/dev/null` 17599 -else 17600 - pkg_failed=yes 17601 -fi 17602 - else 17603 - pkg_failed=untried 17604 -fi 17605 - 17606 - 17607 - 17608 -if test $pkg_failed = yes; then 17609 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 17610 -$as_echo "no" >&6; } 17611 - 17612 -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then 17613 - _pkg_short_errors_supported=yes 17614 -else 17615 - _pkg_short_errors_supported=no 17616 -fi 17617 - if test $_pkg_short_errors_supported = yes; then 17618 - LIBREADOSM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "readosm" 2>&1` 17619 - else 17620 - LIBREADOSM_PKG_ERRORS=`$PKG_CONFIG --print-errors "readosm" 2>&1` 17621 - fi 17622 - # Put the nasty error message in config.log where it belongs 17623 - echo "$LIBREADOSM_PKG_ERRORS" >&5 17624 - 17625 - as_fn_error $? "'libreadosm' is required but it doesn't seem to be installed on this system." "$LINENO" 5 17626 -elif test $pkg_failed = untried; then 17627 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 17628 -$as_echo "no" >&6; } 17629 - as_fn_error $? "'libreadosm' is required but it doesn't seem to be installed on this system." "$LINENO" 5 17630 -else 17631 - LIBREADOSM_CFLAGS=$pkg_cv_LIBREADOSM_CFLAGS 17632 - LIBREADOSM_LIBS=$pkg_cv_LIBREADOSM_LIBS 17633 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 17634 -$as_echo "yes" >&6; } 17635 - 17636 -fi 17637 - 17638 17578 17639 17579 17640 17580 cat >confcache <<\_ACEOF 17641 17581 # This file is a shell script that caches the results of configure 17642 17582 # tests run on this system so they can be shared between configure 17643 17583 # scripts and configure runs, see configure's option --config-cache. 17644 17584 # It is not useful on other systems. If it contains results you don't ................................................................................ 18179 18119 test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 18180 18120 18181 18121 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 18182 18122 # Save the log message, to keep $0 and so on meaningful, and to 18183 18123 # report actual input values of CONFIG_FILES etc. instead of their 18184 18124 # values after options handling. 18185 18125 ac_log=" 18186 -This file was extended by spatialite-tools $as_me 3.1.0, which was 18126 +This file was extended by spatialite-tools $as_me 3.0.1, which was 18187 18127 generated by GNU Autoconf 2.68. Invocation command line was 18188 18128 18189 18129 CONFIG_FILES = $CONFIG_FILES 18190 18130 CONFIG_HEADERS = $CONFIG_HEADERS 18191 18131 CONFIG_LINKS = $CONFIG_LINKS 18192 18132 CONFIG_COMMANDS = $CONFIG_COMMANDS 18193 18133 $ $0 $@ ................................................................................ 18245 18185 18246 18186 Report bugs to <a.furieri@lqt.it>." 18247 18187 18248 18188 _ACEOF 18249 18189 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 18250 18190 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" 18251 18191 ac_cs_version="\\ 18252 -spatialite-tools config.status 3.1.0 18192 +spatialite-tools config.status 3.0.1 18253 18193 configured by $0, generated by GNU Autoconf 2.68, 18254 18194 with options \\"\$ac_cs_config\\" 18255 18195 18256 18196 Copyright (C) 2010 Free Software Foundation, Inc. 18257 18197 This config.status script is free software; the Free Software Foundation 18258 18198 gives unlimited permission to copy, distribute and modify it." 18259 18199
Changes to configure.ac.
1 1 # -*- Autoconf -*- 2 2 # Process this file with autoconf to produce a configure script. 3 3 4 4 AC_PREREQ(2.61) 5 -AC_INIT(spatialite-tools, 3.1.0, a.furieri@lqt.it) 5 +AC_INIT(spatialite-tools, 3.0.1, a.furieri@lqt.it) 6 6 AC_LANG(C) 7 7 AC_CONFIG_MACRO_DIR([m4]) 8 8 9 9 AM_INIT_AUTOMAKE 10 10 AM_MAINTAINER_MODE 11 11 AM_CONFIG_HEADER(config.h) 12 12 ................................................................................ 19 19 AC_CHECK_HEADERS(float.h,, [AC_MSG_ERROR([cannot find float.h, bailing out])]) 20 20 AC_CHECK_HEADERS(fcntl.h,, [AC_MSG_ERROR([cannot find fcntl.h, bailing out])]) 21 21 AC_CHECK_HEADERS(inttypes.h,, [AC_MSG_ERROR([cannot find inttypes.h, bailing out])]) 22 22 AC_CHECK_HEADERS(stddef.h,, [AC_MSG_ERROR([cannot find stddef.h, bailing out])]) 23 23 AC_CHECK_HEADERS(stdint.h,, [AC_MSG_ERROR([cannot find stdint.h, bailing out])]) 24 24 AC_CHECK_HEADERS(sys/time.h,, [AC_MSG_ERROR([cannot find sys/time.h, bailing out])]) 25 25 AC_CHECK_HEADERS(unistd.h,, [AC_MSG_ERROR([cannot find unistd.h, bailing out])]) 26 +AC_CHECK_HEADERS(expat.h,, [AC_MSG_ERROR([cannot find expat.h, bailing out])]) 26 27 27 28 # Checks for programs. 28 29 AC_PROG_CXX 29 30 AC_PROG_CC 30 31 AC_PROG_CPP 31 32 AC_PROG_INSTALL 32 33 AC_PROG_LN_S ................................................................................ 115 116 LIBS="$LIBS_SAVE" 116 117 117 118 PKG_CHECK_MODULES([LIBSPATIALITE], [spatialite], , AC_MSG_ERROR(['libspatialite' is required but it doesn't seem to be installed on this system.])) 118 119 AC_SUBST(LIBSPATIALITE_CFLAGS) 119 120 AC_SUBST(LIBSPATIALITE_LIBS) 120 121 PKG_CHECK_MODULES([LIBFREEXL], [freexl], , AC_MSG_ERROR(['libfreexl' is required but it doesn't seem to be installed on this system.])) 121 122 AC_SUBST(LIBFREEXL_CFLAGS) 122 -AC_SUBST(LIBREADOSM_LIBS)PKG_CHECK_MODULES([LIBREADOSM], [readosm], , AC_MSG_ERROR(['libreadosm' is required but it doesn't seem to be installed on this system.])) 123 -AC_SUBST(LIBREADOSM_CFLAGS) 124 -AC_SUBST(LIBREADOSM_LIBS) 123 +AC_SUBST(LIBFREEXL_LIBS) 125 124 126 125 AC_OUTPUT
Changes to makefile.vc.
88 88 if exist $(SPATIALITE_GML_EXE).manifest mt -manifest \ 89 89 $(SPATIALITE_GML_EXE).manifest \ 90 90 -outputresource:$(SPATIALITE_GML_EXE);1 91 91 92 92 $(SPATIALITE_OSM_RAW_EXE): spatialite_osm_raw.obj 93 93 cl spatialite_osm_raw.obj C:\OSGeo4W\lib\proj_i.lib \ 94 94 C:\OSGeo4W\lib\iconv.lib \ 95 - C:\OSGeo4W\lib\libreadosm.lib \ 96 95 C:\OSGeo4W\lib\libexpat.lib \ 97 - C:\OSGeo4W\lib\libz.lib \ 98 96 C:\OSGeo4W\lib\spatialite_i.lib 99 97 if exist $(SPATIALITE_OSM_RAW_EXE).manifest mt -manifest \ 100 98 $(SPATIALITE_OSM_RAW_EXE).manifest \ 101 99 -outputresource:$(SPATIALITE_OSM_RAW_EXE);1 102 100 103 101 $(SPATIALITE_OSM_FILTER_EXE): spatialite_osm_filter.obj 104 102 cl spatialite_osm_filter.obj C:\OSGeo4W\lib\proj_i.lib \
Changes to spatialite_osm_filter.c.
1561 1561 fprintf (stderr, 1562 1562 "==============================================================\n"); 1563 1563 fprintf (stderr, 1564 1564 "-h or --help print this help message\n"); 1565 1565 fprintf (stderr, 1566 1566 "-o or --osm-path pathname the OSM-XML [output] file path\n"); 1567 1567 fprintf (stderr, 1568 - "-w or --wkt-mask-path pathname path of text file [WKT mask]\n"); 1568 + "-w or --wkt-mask-path pathname path of text file [WKT mask]\n"); 1569 1569 fprintf (stderr, 1570 1570 "-d or --db-path pathname the SpatiaLite DB path\n\n"); 1571 1571 fprintf (stderr, "you can specify the following options as well\n"); 1572 1572 fprintf (stderr, 1573 1573 "-cs or --cache-size num DB cache size (how many pages)\n"); 1574 1574 fprintf (stderr, 1575 1575 "-m or --in-memory using IN-MEMORY database\n"); 1576 - fprintf (stderr, 1577 - "-jo or --journal-off unsafe [but faster] mode\n"); 1578 1576 } 1579 1577 1580 1578 int 1581 1579 main (int argc, char *argv[]) 1582 1580 { 1583 1581 /* the MAIN function simply perform arguments checking */ 1584 1582 sqlite3 *handle; ................................................................................ 1585 1583 int i; 1586 1584 int next_arg = ARG_NONE; 1587 1585 const char *osm_path = NULL; 1588 1586 const char *wkt_path = NULL; 1589 1587 const char *db_path = NULL; 1590 1588 int in_memory = 0; 1591 1589 int cache_size = 0; 1592 - int journal_off = 0; 1593 1590 int error = 0; 1594 1591 void *mask = NULL; 1595 1592 int mask_len = 0; 1596 1593 FILE *out = NULL; 1597 - char *sql_err = NULL; 1598 - int ret; 1599 1594 1600 1595 for (i = 1; i < argc; i++) 1601 1596 { 1602 1597 /* parsing the invocation arguments */ 1603 1598 if (next_arg != ARG_NONE) 1604 1599 { 1605 1600 switch (next_arg) ................................................................................ 1664 1659 } 1665 1660 if (strcasecmp (argv[i], "-m") == 0) 1666 1661 { 1667 1662 in_memory = 1; 1668 1663 next_arg = ARG_NONE; 1669 1664 continue; 1670 1665 } 1671 - if (strcasecmp (argv[i], "--in-memory") == 0) 1666 + if (strcasecmp (argv[i], "-in-memory") == 0) 1672 1667 { 1673 1668 in_memory = 1; 1674 - next_arg = ARG_NONE; 1675 - continue; 1676 - } 1677 - if (strcasecmp (argv[i], "-jo") == 0) 1678 - { 1679 - journal_off = 1; 1680 - next_arg = ARG_NONE; 1681 - continue; 1682 - } 1683 - if (strcasecmp (argv[i], "--journal-off") == 0) 1684 - { 1685 - journal_off = 1; 1686 1669 next_arg = ARG_NONE; 1687 1670 continue; 1688 1671 } 1689 1672 fprintf (stderr, "unknown argument: %s\n", argv[i]); 1690 1673 error = 1; 1691 1674 } 1692 1675 if (error) ................................................................................ 1734 1717 if (!handle) 1735 1718 return -1; 1736 1719 if (in_memory) 1737 1720 { 1738 1721 /* loading the DB in-memory */ 1739 1722 sqlite3 *mem_db_handle; 1740 1723 sqlite3_backup *backup; 1724 + int ret; 1741 1725 ret = 1742 1726 sqlite3_open_v2 (":memory:", &mem_db_handle, 1743 1727 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 1744 1728 NULL); 1745 1729 if (ret != SQLITE_OK) 1746 1730 { 1747 1731 fprintf (stderr, "cannot open 'MEMORY-DB': %s\n", ................................................................................ 1769 1753 printf ("\nusing IN-MEMORY database\n"); 1770 1754 } 1771 1755 1772 1756 out = fopen (osm_path, "wb"); 1773 1757 if (out == NULL) 1774 1758 goto stop; 1775 1759 1776 - if (journal_off) 1777 - { 1778 - /* disabling the journal: unsafe but faster */ 1779 - ret = 1780 - sqlite3_exec (handle, "PRAGMA journal_mode = OFF", NULL, NULL, 1781 - &sql_err); 1782 - if (ret != SQLITE_OK) 1783 - { 1784 - fprintf (stderr, "PRAGMA journal_mode=OFF error: %s\n", 1785 - sql_err); 1786 - sqlite3_free (sql_err); 1787 - goto stop; 1788 - } 1789 - } 1790 - 1760 + fprintf (stderr, "Evvai reset\n"); 1791 1761 /* resetting filtered nodes, ways and relations */ 1792 1762 if (!reset_filtered (handle)) 1793 1763 goto stop; 1794 1764 1765 + fprintf (stderr, "Evvai nodes\n"); 1795 1766 /* identifying filtered nodes */ 1796 1767 if (!filter_nodes (handle, mask, mask_len)) 1797 1768 goto stop; 1798 1769 1770 + fprintf (stderr, "Evvai rel-rels\n"); 1799 1771 /* identifying relations depending on other relations */ 1800 1772 if (!filter_rel_relations (handle)) 1801 1773 goto stop; 1802 1774 1775 + fprintf (stderr, "Evvai way-rels\n"); 1803 1776 /* identifying ways depending on relations */ 1804 1777 if (!filter_way_relations (handle)) 1805 1778 goto stop; 1806 1779 1780 + fprintf (stderr, "Evvai node-rels\n"); 1807 1781 /* identifying nodes depending on relations */ 1808 1782 if (!filter_node_relations (handle)) 1809 1783 goto stop; 1810 1784 1785 + fprintf (stderr, "Evvai node-ways\n"); 1811 1786 /* identifying nodes depending on ways */ 1812 1787 if (!filter_node_ways (handle)) 1813 1788 goto stop; 1814 1789 1815 1790 /* writing the OSM header */ 1816 1791 fprintf (out, "<?xml version='1.0' encoding='UTF-8'?>\n"); 1817 1792 fprintf (out, "<osm version=\"0.6\" generator=\"splite2osm\">\n");
Changes to spatialite_osm_map.c.
29 29 #include <sys/types.h> 30 30 #endif 31 31 32 32 #include <stdlib.h> 33 33 #include <stdio.h> 34 34 #include <string.h> 35 35 #include <float.h> 36 + 37 +#include <expat.h> 36 38 37 39 #include "config.h" 38 40 39 41 #ifdef SPATIALITE_AMALGAMATION 40 42 #include <spatialite/sqlite3.h> 41 43 #else 42 44 #include <sqlite3.h> 43 45 #endif 44 46 45 47 #include <spatialite/gaiageo.h> 46 48 #include <spatialite.h> 47 -#include <readosm.h> 48 49 49 50 #define ARG_NONE 0 50 51 #define ARG_OSM_PATH 1 51 52 #define ARG_DB_PATH 2 52 53 #define ARG_CACHE_SIZE 3 53 54 55 +#define MAX_TAG 16 56 + 57 +#if defined(_WIN32) && !defined(__MINGW32__) 58 +#define strcasecmp _stricmp 59 +#endif /* not WIN32 */ 60 + 61 +#if defined(_WIN32) 62 +#define atol_64 _atoi64 63 +#else 64 +#define atol_64 atoll 65 +#endif 66 + 67 +#define BUFFSIZE 8192 68 + 69 +#define CURRENT_TAG_UNKNOWN 0 70 +#define CURRENT_TAG_IS_NODE 1 71 +#define CURRENT_TAG_IS_WAY 2 72 +#define CURRENT_TAG_IS_RELATION 3 73 + 54 74 struct aux_params 55 75 { 56 76 /* an auxiliary struct used for XML parsing */ 57 77 sqlite3 *db_handle; 58 78 sqlite3_stmt *ins_tmp_nodes_stmt; 59 79 sqlite3_stmt *ins_tmp_ways_stmt; 60 80 sqlite3_stmt *ins_generic_point_stmt; 61 81 sqlite3_stmt *ins_addresses_stmt; 62 82 sqlite3_stmt *ins_generic_linestring_stmt; 63 83 sqlite3_stmt *ins_generic_polygon_stmt; 84 + int current_tag; 64 85 }; 65 86 66 87 struct layers 67 88 { 68 89 const char *name; 69 90 int ok_point; 70 91 int ok_linestring; ................................................................................ 139 160 { 140 161 "building", 0, 0, 0, NULL, NULL, NULL}, 141 162 { 142 163 "parking", 0, 0, 0, NULL, NULL, NULL}, 143 164 { 144 165 NULL, 0, 0, 0, NULL, NULL, NULL},}; 145 166 146 -struct node_refs 167 +struct tag 147 168 { 148 - int count; 149 - sqlite3_int64 *id; 150 - char *found; 169 + char *k; 170 + char *v; 171 + struct tag *next; 172 +}; 173 + 174 +struct node 175 +{ 176 + sqlite3_int64 id; 177 + double lat; 178 + double lon; 179 + struct tag *first; 180 + struct tag *last; 181 +} glob_node; 182 + 183 +struct nd 184 +{ 185 + sqlite3_int64 ref; 186 + char found; 187 + struct nd *next; 151 188 }; 152 189 153 -struct way_refs 190 +struct way 154 191 { 155 - int count; 156 - sqlite3_int64 *id; 157 - char *found; 192 + sqlite3_int64 id; 193 + struct nd *first_nd; 194 + struct nd *last_nd; 195 + struct tag *first; 196 + struct tag *last; 197 +} glob_way; 198 + 199 +struct member 200 +{ 201 + sqlite3_int64 ref; 202 + int is_node; 203 + int is_way; 204 + char found; 205 + char *role; 206 + gaiaGeomCollPtr geom; 207 + struct member *next; 158 208 }; 159 209 160 -struct ring_refs 210 +struct relation 161 211 { 162 - int count; 163 - sqlite3_int64 *id; 164 - gaiaGeomCollPtr *geom; 165 - char *outer; 166 - char *found; 167 -}; 212 + sqlite3_int64 id; 213 + struct member *first_member; 214 + struct member *last_member; 215 + struct tag *first; 216 + struct tag *last; 217 +} glob_relation; 168 218 169 219 static void 170 220 create_point_table (struct aux_params *params, struct layers *layer) 171 221 { 172 222 int ret; 173 223 char *err_msg = NULL; 174 224 char sql[1024]; ................................................................................ 306 356 fprintf (stderr, "SQL error: %s\n%s\n", sql, 307 357 sqlite3_errmsg (params->db_handle)); 308 358 return; 309 359 } 310 360 layer->ins_polygon_stmt = stmt; 311 361 } 312 362 313 -static int 363 +static void 364 +free_tag (struct tag *p) 365 +{ 366 + if (p->k) 367 + free (p->k); 368 + if (p->v) 369 + free (p->v); 370 + free (p); 371 +} 372 + 373 +static void 374 +free_member (struct member *p) 375 +{ 376 + if (p->role) 377 + free (p->role); 378 + free (p); 379 +} 380 + 381 +static void 382 +start_node (struct aux_params *params, const char **attr) 383 +{ 384 + int i; 385 + glob_node.id = -1; 386 + glob_node.lat = DBL_MAX; 387 + glob_node.lon = DBL_MAX; 388 + glob_node.first = NULL; 389 + glob_node.last = NULL; 390 + for (i = 0; attr[i]; i += 2) 391 + { 392 + if (strcmp (attr[i], "id") == 0) 393 + glob_node.id = atol_64 (attr[i + 1]); 394 + if (strcmp (attr[i], "lat") == 0) 395 + glob_node.lat = atof (attr[i + 1]); 396 + if (strcmp (attr[i], "lon") == 0) 397 + glob_node.lon = atof (attr[i + 1]); 398 + } 399 + params->current_tag = CURRENT_TAG_IS_NODE; 400 +} 401 + 402 +static void 314 403 point_layer_insert (struct aux_params *params, const char *layer_name, 315 - const readosm_node * node, const char *sub_type, 316 - const char *name) 404 + sqlite3_int64 id, double lat, double lon, 405 + const char *sub_type, const char *name) 317 406 { 318 407 struct layers *layer; 319 408 int i = 0; 320 409 while (1) 321 410 { 322 411 layer = &(base_layers[i++]); 323 412 if (layer->name == NULL) 324 - return 1; 413 + return; 325 414 if (strcmp (layer->name, layer_name) == 0) 326 415 { 327 416 if (layer->ok_point == 0) 328 417 { 329 418 layer->ok_point = 1; 330 419 create_point_table (params, layer); 331 420 } ................................................................................ 332 421 if (layer->ins_point_stmt) 333 422 { 334 423 int ret; 335 424 unsigned char *blob; 336 425 int blob_size; 337 426 gaiaGeomCollPtr geom = gaiaAllocGeomColl (); 338 427 geom->Srid = 4326; 339 - gaiaAddPointToGeomColl (geom, node->longitude, 340 - node->latitude); 428 + gaiaAddPointToGeomColl (geom, lon, lat); 341 429 sqlite3_reset (layer->ins_point_stmt); 342 430 sqlite3_clear_bindings (layer->ins_point_stmt); 343 - sqlite3_bind_int64 (layer->ins_point_stmt, 1, node->id); 431 + sqlite3_bind_int64 (layer->ins_point_stmt, 1, id); 344 432 if (sub_type == NULL) 345 433 sqlite3_bind_null (layer->ins_point_stmt, 2); 346 434 else 347 435 sqlite3_bind_text (layer->ins_point_stmt, 2, 348 436 sub_type, strlen (sub_type), 349 437 SQLITE_STATIC); 350 438 if (name == NULL) ................................................................................ 354 442 strlen (name), SQLITE_STATIC); 355 443 gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 356 444 gaiaFreeGeomColl (geom); 357 445 sqlite3_bind_blob (layer->ins_point_stmt, 4, blob, 358 446 blob_size, free); 359 447 ret = sqlite3_step (layer->ins_point_stmt); 360 448 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 361 - return 1; 449 + return; 362 450 fprintf (stderr, "sqlite3_step() error: INS_POINT %s\n", 363 451 layer_name); 364 452 sqlite3_finalize (layer->ins_point_stmt); 365 453 layer->ins_point_stmt = NULL; 366 - return 0; 367 454 } 368 - return 1; 455 + return; 369 456 } 370 457 } 371 - return 1; 372 458 } 373 459 374 -static int 375 -point_generic_insert (struct aux_params *params, const readosm_node * node, 376 - const char *name) 460 +static void 461 +point_generic_insert (struct aux_params *params, sqlite3_int64 id, double lat, 462 + double lon, const char *name) 377 463 { 378 464 if (params->ins_generic_point_stmt) 379 465 { 380 466 int ret; 381 467 unsigned char *blob; 382 468 int blob_size; 383 469 gaiaGeomCollPtr geom = gaiaAllocGeomColl (); 384 470 geom->Srid = 4326; 385 - gaiaAddPointToGeomColl (geom, node->longitude, node->latitude); 471 + gaiaAddPointToGeomColl (geom, lon, lat); 386 472 sqlite3_reset (params->ins_generic_point_stmt); 387 473 sqlite3_clear_bindings (params->ins_generic_point_stmt); 388 - sqlite3_bind_int64 (params->ins_generic_point_stmt, 1, node->id); 474 + sqlite3_bind_int64 (params->ins_generic_point_stmt, 1, id); 389 475 if (name == NULL) 390 476 sqlite3_bind_null (params->ins_generic_point_stmt, 2); 391 477 else 392 478 sqlite3_bind_text (params->ins_generic_point_stmt, 2, name, 393 479 strlen (name), SQLITE_STATIC); 394 480 gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 395 481 gaiaFreeGeomColl (geom); 396 482 sqlite3_bind_blob (params->ins_generic_point_stmt, 3, blob, 397 483 blob_size, free); 398 484 ret = sqlite3_step (params->ins_generic_point_stmt); 399 485 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 400 - return 1; 486 + return; 401 487 fprintf (stderr, "sqlite3_step() error: INS_GENERIC_POINT\n"); 402 488 sqlite3_finalize (params->ins_generic_point_stmt); 403 489 params->ins_generic_point_stmt = NULL; 404 - return 0; 405 490 } 406 - return 1; 407 491 } 408 492 409 -static int 410 -address_insert (struct aux_params *params, const readosm_node * node, 411 - const char *country, const char *city, const char *postcode, 412 - const char *street, const char *housename, 413 - const char *housenumber) 493 +static void 494 +address_insert (struct aux_params *params, sqlite3_int64 id, double lat, 495 + double lon, const char *country, const char *city, 496 + const char *postcode, 497 + const char *street, 498 + const char *housename, const char *housenumber) 414 499 { 415 500 if (params->ins_addresses_stmt) 416 501 { 417 502 int ret; 418 503 unsigned char *blob; 419 504 int blob_size; 420 505 gaiaGeomCollPtr geom = gaiaAllocGeomColl (); 421 506 geom->Srid = 4326; 422 - gaiaAddPointToGeomColl (geom, node->longitude, node->latitude); 507 + gaiaAddPointToGeomColl (geom, lon, lat); 423 508 sqlite3_reset (params->ins_addresses_stmt); 424 509 sqlite3_clear_bindings (params->ins_addresses_stmt); 425 - sqlite3_bind_int64 (params->ins_addresses_stmt, 1, node->id); 510 + sqlite3_bind_int64 (params->ins_addresses_stmt, 1, id); 426 511 if (country == NULL) 427 512 sqlite3_bind_null (params->ins_addresses_stmt, 2); 428 513 else 429 514 sqlite3_bind_text (params->ins_addresses_stmt, 2, country, 430 515 strlen (country), SQLITE_STATIC); 431 516 if (city == NULL) 432 517 sqlite3_bind_null (params->ins_addresses_stmt, 3); ................................................................................ 455 540 strlen (housenumber), SQLITE_STATIC); 456 541 gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 457 542 gaiaFreeGeomColl (geom); 458 543 sqlite3_bind_blob (params->ins_addresses_stmt, 8, blob, blob_size, 459 544 free); 460 545 ret = sqlite3_step (params->ins_addresses_stmt); 461 546 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 462 - return 1; 547 + return; 463 548 fprintf (stderr, "sqlite3_step() error: INS_ADDRESSES\n"); 464 549 sqlite3_finalize (params->ins_addresses_stmt); 465 550 params->ins_addresses_stmt = NULL; 466 - return 0; 467 551 } 468 - return 1; 469 552 } 470 553 471 -static int 472 -tmp_nodes_insert (struct aux_params *params, const readosm_node * node) 554 +static void 555 +eval_node (struct aux_params *params) 473 556 { 474 - int ret; 475 - if (params->ins_tmp_nodes_stmt == NULL) 476 - return 1; 477 - sqlite3_reset (params->ins_tmp_nodes_stmt); 478 - sqlite3_clear_bindings (params->ins_tmp_nodes_stmt); 479 - sqlite3_bind_int64 (params->ins_tmp_nodes_stmt, 1, node->id); 480 - sqlite3_bind_double (params->ins_tmp_nodes_stmt, 2, node->latitude); 481 - sqlite3_bind_double (params->ins_tmp_nodes_stmt, 3, node->longitude); 482 - ret = sqlite3_step (params->ins_tmp_nodes_stmt); 483 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 484 - return 1; 485 - fprintf (stderr, "sqlite3_step() error: INS_TMP_NODES\n"); 486 - sqlite3_finalize (params->ins_tmp_nodes_stmt); 487 - params->ins_tmp_nodes_stmt = NULL; 488 - return 0; 489 -} 490 - 491 -static int 492 -consume_node (const void *user_data, const readosm_node * node) 493 -{ 494 -/* processing an OSM Node (ReadOSM callback function) */ 495 - struct aux_params *params = (struct aux_params *) user_data; 496 - const readosm_tag *p_tag; 497 - int i_tag; 557 + struct tag *p_tag; 498 558 const char *p; 499 - int i_lyr = 0; 500 - int ret; 559 + int i = 0; 501 560 const char *layer_name = NULL; 502 - const char *sub_type = NULL; 503 - const char *name = NULL; 504 - const char *country = NULL; 505 - const char *city = NULL; 506 - const char *postcode = NULL; 507 - const char *street = NULL; 508 - const char *housename = NULL; 509 - const char *housenumber = NULL; 510 - 511 - if (!tmp_nodes_insert (params, node)) 512 - return READOSM_ABORT; 513 - 561 + char *sub_type = NULL; 562 + char *name = NULL; 563 + char *country = NULL; 564 + char *city = NULL; 565 + char *postcode = NULL; 566 + char *street = NULL; 567 + char *housename = NULL; 568 + char *housenumber = NULL; 569 + if (glob_node.first == NULL) 570 + return; 514 571 while (1) 515 572 { 516 - p = base_layers[i_lyr++].name; 573 + p = base_layers[i++].name; 517 574 if (!p) 518 575 break; 519 - for (i_tag = 0; i_tag < node->tag_count; i_tag++) 576 + p_tag = glob_node.first; 577 + while (p_tag) 520 578 { 521 - p_tag = node->tags + i_tag; 522 - if (strcmp (p_tag->key, p) == 0) 579 + if (strcmp (p_tag->k, p) == 0) 523 580 { 524 581 layer_name = p; 525 - sub_type = p_tag->value; 582 + sub_type = p_tag->v; 526 583 } 527 - if (strcmp (p_tag->key, "name") == 0) 528 - name = p_tag->value; 584 + if (strcmp (p_tag->k, "name") == 0) 585 + name = p_tag->v; 586 + p_tag = p_tag->next; 529 587 } 530 588 if (layer_name) 531 589 break; 532 590 } 533 - 534 591 if (layer_name) 535 592 { 536 - ret = point_layer_insert (params, layer_name, node, sub_type, name); 537 - if (ret) 538 - return READOSM_OK; 539 - return READOSM_ABORT; 593 + point_layer_insert (params, layer_name, glob_node.id, glob_node.lat, 594 + glob_node.lon, sub_type, name); 595 + return; 540 596 } 541 597 else if (name != NULL) 542 598 { 543 - ret = point_generic_insert (params, node, name); 544 - if (ret) 545 - return READOSM_OK; 546 - return READOSM_ABORT; 599 + point_generic_insert (params, glob_node.id, glob_node.lat, 600 + glob_node.lon, name); 601 + return; 547 602 } 548 603 549 604 /* may be an house address */ 550 - for (i_tag = 0; i_tag < node->tag_count; i_tag++) 605 + p_tag = glob_node.first; 606 + while (p_tag) 551 607 { 552 - p_tag = node->tags + i_tag; 553 - if (strcmp (p_tag->key, "addr:country") == 0) 554 - country = p_tag->value; 555 - if (strcmp (p_tag->key, "addr:city") == 0) 556 - city = p_tag->value; 557 - if (strcmp (p_tag->key, "addr:postcode") == 0) 558 - postcode = p_tag->value; 559 - if (strcmp (p_tag->key, "addr:street") == 0) 560 - street = p_tag->value; 561 - if (strcmp (p_tag->key, "addr:housename") == 0) 562 - housename = p_tag->value; 563 - if (strcmp (p_tag->key, "addr:housenumber") == 0) 564 - housenumber = p_tag->value; 608 + if (strcmp (p_tag->k, "addr:country") == 0) 609 + country = p_tag->v; 610 + if (strcmp (p_tag->k, "addr:city") == 0) 611 + city = p_tag->v; 612 + if (strcmp (p_tag->k, "addr:postcode") == 0) 613 + postcode = p_tag->v; 614 + if (strcmp (p_tag->k, "addr:street") == 0) 615 + street = p_tag->v; 616 + if (strcmp (p_tag->k, "addr:housename") == 0) 617 + housename = p_tag->v; 618 + if (strcmp (p_tag->k, "addr:housenumber") == 0) 619 + housenumber = p_tag->v; 620 + p_tag = p_tag->next; 565 621 } 566 622 if (country || city || postcode || street || housename || housenumber) 567 - { 568 - ret = address_insert (params, node, country, city, postcode, street, 569 - housename, housenumber); 570 - if (ret) 571 - return READOSM_OK; 572 - return READOSM_ABORT; 573 - } 574 - return READOSM_OK; 575 -} 576 - 577 -static struct node_refs * 578 -create_node_refs (const readosm_way * way) 579 -{ 580 -/* creating and initializing the node_refs helper struct */ 581 - int i_ref; 582 - struct node_refs *refs = malloc (sizeof (struct node_refs)); 583 - if (refs == NULL) 584 - return NULL; 585 - refs->count = way->node_ref_count; 586 - refs->id = malloc (sizeof (sqlite3_int64) * refs->count); 587 - if (refs->id == NULL) 588 - { 589 - free (refs); 590 - return NULL; 591 - } 592 - refs->found = malloc (refs->count); 593 - if (refs->found == NULL) 594 - { 595 - free (refs->id); 596 - free (refs); 597 - return NULL; 598 - } 599 - for (i_ref = 0; i_ref < way->node_ref_count; i_ref++) 600 - { 601 - *(refs->id + i_ref) = *(way->node_refs + i_ref); 602 - *(refs->found + i_ref) = 'N'; 603 - } 604 - return refs; 605 -} 606 - 607 -static void 608 -update_node_refs (struct node_refs *nodes, gaiaLinestringPtr ln, 609 - sqlite3_int64 id, double lat, double lon) 610 -{ 611 -/* updating the node_refs helper struct */ 612 - int i_ref; 613 - for (i_ref = 0; i_ref < nodes->count; i_ref++) 614 - { 615 - if (*(nodes->id + i_ref) == id) 616 - { 617 - *(nodes->found + i_ref) = 'Y'; 618 - gaiaSetPoint (ln->Coords, i_ref, lon, lat); 619 - } 620 - } 621 -} 622 - 623 -static void 624 -destroy_node_refs (struct node_refs *nodes) 625 -{ 626 -/* destroying the node_refs helper struct */ 627 - if (nodes == NULL) 623 + address_insert (params, glob_node.id, glob_node.lat, glob_node.lon, 624 + country, city, postcode, street, housename, 625 + housenumber); 626 +} 627 + 628 +static void 629 +tmp_nodes_insert (struct aux_params *params, sqlite3_int64 id, double lat, 630 + double lon) 631 +{ 632 + int ret; 633 + if (params->ins_tmp_nodes_stmt == NULL) 634 + return; 635 + sqlite3_reset (params->ins_tmp_nodes_stmt); 636 + sqlite3_clear_bindings (params->ins_tmp_nodes_stmt); 637 + sqlite3_bind_int64 (params->ins_tmp_nodes_stmt, 1, id); 638 + sqlite3_bind_double (params->ins_tmp_nodes_stmt, 2, lat); 639 + sqlite3_bind_double (params->ins_tmp_nodes_stmt, 3, lon); 640 + ret = sqlite3_step (params->ins_tmp_nodes_stmt); 641 + if (ret == SQLITE_DONE || ret == SQLITE_ROW) 628 642 return; 629 - if (nodes->id != NULL) 630 - free (nodes->id); 631 - if (nodes->found != NULL) 632 - free (nodes->found); 633 - free (nodes); 643 + fprintf (stderr, "sqlite3_step() error: INS_TMP_NODES\n"); 644 + sqlite3_finalize (params->ins_tmp_nodes_stmt); 645 + params->ins_tmp_nodes_stmt = NULL; 646 +} 647 + 648 +static void 649 +end_node (struct aux_params *params) 650 +{ 651 + struct tag *p_tag; 652 + struct tag *p_tag2; 653 + 654 + tmp_nodes_insert (params, glob_node.id, glob_node.lat, glob_node.lon); 655 + eval_node (params); 656 + p_tag = glob_node.first; 657 + while (p_tag) 658 + { 659 + p_tag2 = p_tag->next; 660 + free_tag (p_tag); 661 + p_tag = p_tag2; 662 + } 663 + glob_node.id = -1; 664 + glob_node.lat = DBL_MAX; 665 + glob_node.lon = DBL_MAX; 666 + glob_node.first = NULL; 667 + glob_node.last = NULL; 668 + params->current_tag = CURRENT_TAG_UNKNOWN; 669 +} 670 + 671 +static void 672 +start_way (struct aux_params *params, const char **attr) 673 +{ 674 + int i; 675 + glob_way.id = -1; 676 + glob_way.first_nd = NULL; 677 + glob_way.last_nd = NULL; 678 + glob_way.first = NULL; 679 + glob_way.last = NULL; 680 + for (i = 0; attr[i]; i += 2) 681 + { 682 + if (strcmp (attr[i], "id") == 0) 683 + glob_way.id = atol_64 (attr[i + 1]); 684 + } 685 + params->current_tag = CURRENT_TAG_IS_WAY; 634 686 } 635 687 636 688 static gaiaGeomCollPtr 637 -build_linestring (sqlite3 * db_handle, const readosm_way * way) 689 +build_linestring (sqlite3 * db_handle) 638 690 { 639 691 gaiaGeomCollPtr geom; 640 692 gaiaLinestringPtr ln; 641 693 int points = 0; 642 694 int tbd; 643 695 int block = 128; 644 696 int base = 0; ................................................................................ 647 699 int ret; 648 700 int count; 649 701 char sql[8192]; 650 702 sqlite3_stmt *stmt; 651 703 sqlite3_int64 id; 652 704 double lat; 653 705 double lon; 654 - int i_ref; 655 - struct node_refs *refs = NULL; 656 - 657 - points = way->node_ref_count; 706 + struct nd *p_nd = glob_way.first_nd; 707 + while (p_nd) 708 + { 709 + points++; 710 + p_nd = p_nd->next; 711 + } 658 712 if (!points) 659 713 return NULL; 660 - refs = create_node_refs (way); 661 - if (refs == NULL) 662 - return NULL; 663 714 geom = gaiaAllocGeomColl (); 664 715 geom->Srid = 4326; 665 716 ln = gaiaAddLinestringToGeomColl (geom, points); 666 717 tbd = points; 667 718 while (tbd > 0) 668 719 { 669 720 /* ................................................................................ 691 742 sqlite3_errmsg (db_handle)); 692 743 gaiaFreeGeomColl (geom); 693 744 return NULL; 694 745 } 695 746 sqlite3_reset (stmt); 696 747 sqlite3_clear_bindings (stmt); 697 748 ind = 1; 698 - for (i_ref = 0; i_ref < refs->count; i_ref++) 749 + count = 0; 750 + p_nd = glob_way.first_nd; 751 + while (p_nd) 699 752 { 700 - if (i_ref < base) 701 - continue; 702 - if (i_ref >= (base + how_many)) 753 + if (count < base) 754 + { 755 + count++; 756 + p_nd = p_nd->next; 757 + continue; 758 + } 759 + if (count >= (base + how_many)) 703 760 break; 704 - sqlite3_bind_int64 (stmt, ind, *(refs->id + i_ref)); 761 + sqlite3_bind_int64 (stmt, ind, p_nd->ref); 705 762 ind++; 706 763 count++; 764 + p_nd = p_nd->next; 707 765 } 708 766 while (1) 709 767 { 710 768 /* scrolling the result set */ 711 769 ret = sqlite3_step (stmt); 712 770 if (ret == SQLITE_DONE) 713 771 { ................................................................................ 716 774 } 717 775 if (ret == SQLITE_ROW) 718 776 { 719 777 /* ok, we've just fetched a valid row */ 720 778 id = sqlite3_column_int64 (stmt, 0); 721 779 lat = sqlite3_column_double (stmt, 1); 722 780 lon = sqlite3_column_double (stmt, 2); 723 - update_node_refs (refs, ln, id, lat, lon); 781 + p_nd = glob_way.first_nd; 782 + count = 0; 783 + while (p_nd) 784 + { 785 + if (p_nd->ref == id) 786 + { 787 + p_nd->found = 1; 788 + gaiaSetPoint (ln->Coords, count, lon, lat); 789 + } 790 + count++; 791 + p_nd = p_nd->next; 792 + } 724 793 } 725 794 else 726 795 { 727 796 /* some unexpected error occurred */ 728 797 fprintf (stderr, "sqlite3_step() error: %s\n", 729 798 sqlite3_errmsg (db_handle)); 730 799 sqlite3_finalize (stmt); ................................................................................ 733 802 } 734 803 sqlite3_finalize (stmt); 735 804 tbd -= how_many; 736 805 base += how_many; 737 806 } 738 807 739 808 /* final checkout */ 740 - for (i_ref = 0; i_ref < refs->count; i_ref++) 809 + p_nd = glob_way.first_nd; 810 + while (p_nd) 741 811 { 742 - if (*(refs->found + i_ref) == 'N') 812 + if (p_nd->found == 0) 743 813 { 744 814 #if defined(_WIN32) || defined(__MINGW32__) 745 815 /* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */ 746 - fprintf (stderr, "UNRESOLVED-NODE %I64d\n", 747 - *(refs->id + i_ref)); 816 + fprintf (stderr, "UNRESOLVED-NODE %I64d\n", p_nd->ref); 748 817 #else 749 - fprintf (stderr, "UNRESOLVED-NODE %lld\n", *(refs->id + i_ref)); 818 + fprintf (stderr, "UNRESOLVED-NODE %lld\n", p_nd->ref); 750 819 #endif 751 820 gaiaFreeGeomColl (geom); 752 - destroy_node_refs (refs); 753 821 return NULL; 754 822 } 823 + p_nd = p_nd->next; 755 824 } 756 - destroy_node_refs (refs); 757 825 return geom; 758 826 } 759 827 760 -static int 828 +static void 761 829 line_layer_insert (struct aux_params *params, const char *layer_name, 762 830 sqlite3_int64 id, unsigned char *blob, int blob_size, 763 831 const char *sub_type, const char *name) 764 832 { 765 833 struct layers *layer; 766 834 int i = 0; 767 835 while (1) 768 836 { 769 837 layer = &(base_layers[i++]); 770 838 if (layer->name == NULL) 771 - return 1; 839 + return; 772 840 if (strcmp (layer->name, layer_name) == 0) 773 841 { 774 842 if (layer->ok_linestring == 0) 775 843 { 776 844 layer->ok_linestring = 1; 777 845 create_linestring_table (params, layer); 778 846 } ................................................................................ 794 862 sqlite3_bind_text (layer->ins_linestring_stmt, 3, 795 863 name, strlen (name), 796 864 SQLITE_STATIC); 797 865 sqlite3_bind_blob (layer->ins_linestring_stmt, 4, blob, 798 866 blob_size, SQLITE_STATIC); 799 867 ret = sqlite3_step (layer->ins_linestring_stmt); 800 868 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 801 - return 1; 869 + return; 802 870 fprintf (stderr, 803 871 "sqlite3_step() error: INS_LINESTRING %s\n", 804 872 layer_name); 805 873 sqlite3_finalize (layer->ins_linestring_stmt); 806 874 layer->ins_linestring_stmt = NULL; 807 - return 0; 808 875 } 809 - return 1; 876 + return; 810 877 } 811 878 } 812 - return 1; 813 879 } 814 880 815 -static int 881 +static void 816 882 polygon_layer_insert (struct aux_params *params, const char *layer_name, 817 883 sqlite3_int64 id, unsigned char *blob, int blob_size, 818 884 const char *sub_type, const char *name) 819 885 { 820 886 struct layers *layer; 821 887 int i = 0; 822 888 while (1) 823 889 { 824 890 layer = &(base_layers[i++]); 825 891 if (layer->name == NULL) 826 - return 1; 892 + return; 827 893 if (strcmp (layer->name, layer_name) == 0) 828 894 { 829 895 if (layer->ok_polygon == 0) 830 896 { 831 897 layer->ok_polygon = 1; 832 898 create_polygon_table (params, layer); 833 899 } ................................................................................ 848 914 else 849 915 sqlite3_bind_text (layer->ins_polygon_stmt, 3, name, 850 916 strlen (name), SQLITE_STATIC); 851 917 sqlite3_bind_blob (layer->ins_polygon_stmt, 4, blob, 852 918 blob_size, SQLITE_STATIC); 853 919 ret = sqlite3_step (layer->ins_polygon_stmt); 854 920 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 855 - return 1; 921 + return; 856 922 fprintf (stderr, 857 923 "sqlite3_step() error: INS_POLYGON %s\n", 858 924 layer_name); 859 925 sqlite3_finalize (layer->ins_polygon_stmt); 860 926 layer->ins_polygon_stmt = NULL; 861 - return 0; 862 927 } 863 - return 1; 928 + return; 864 929 } 865 930 } 866 - return 1; 867 931 } 868 932 869 -static int 933 +static void 870 934 line_generic_insert (struct aux_params *params, sqlite3_int64 id, 871 935 unsigned char *blob, int blob_size, const char *name) 872 936 { 873 937 if (params->ins_generic_linestring_stmt) 874 938 { 875 939 int ret; 876 940 sqlite3_reset (params->ins_generic_linestring_stmt); ................................................................................ 881 945 else 882 946 sqlite3_bind_text (params->ins_generic_linestring_stmt, 2, name, 883 947 strlen (name), SQLITE_STATIC); 884 948 sqlite3_bind_blob (params->ins_generic_linestring_stmt, 3, blob, 885 949 blob_size, SQLITE_STATIC); 886 950 ret = sqlite3_step (params->ins_generic_linestring_stmt); 887 951 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 888 - return 1; 952 + return; 889 953 fprintf (stderr, "sqlite3_step() error: INS_GENERIC_LINESTRING\n"); 890 954 sqlite3_finalize (params->ins_generic_linestring_stmt); 891 955 params->ins_generic_linestring_stmt = NULL; 892 - return 0; 893 956 } 894 - return 1; 895 957 } 896 958 897 -static int 959 +static void 898 960 polygon_generic_insert (struct aux_params *params, sqlite3_int64 id, 899 961 unsigned char *blob, int blob_size, const char *name) 900 962 { 901 963 if (params->ins_generic_polygon_stmt) 902 964 { 903 965 int ret; 904 966 sqlite3_reset (params->ins_generic_polygon_stmt); ................................................................................ 909 971 else 910 972 sqlite3_bind_text (params->ins_generic_polygon_stmt, 2, name, 911 973 strlen (name), SQLITE_STATIC); 912 974 sqlite3_bind_blob (params->ins_generic_polygon_stmt, 3, blob, 913 975 blob_size, SQLITE_STATIC); 914 976 ret = sqlite3_step (params->ins_generic_polygon_stmt); 915 977 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 916 - return 1; 978 + return; 917 979 fprintf (stderr, "sqlite3_step() error: INS_GENERIC_POLYGON\n"); 918 980 sqlite3_finalize (params->ins_generic_polygon_stmt); 919 981 params->ins_generic_polygon_stmt = NULL; 920 - return 0; 921 982 } 922 - return 1; 923 983 } 924 984 925 -static int 985 +static void 926 986 tmp_ways_insert (struct aux_params *params, sqlite3_int64 id, int area, 927 987 unsigned char *blob, int blob_size) 928 988 { 929 989 int ret; 930 990 if (params->ins_tmp_ways_stmt == NULL) 931 - return 1; 991 + return; 932 992 sqlite3_reset (params->ins_tmp_ways_stmt); 933 993 sqlite3_clear_bindings (params->ins_tmp_ways_stmt); 934 994 sqlite3_bind_int64 (params->ins_tmp_ways_stmt, 1, id); 935 995 sqlite3_bind_int (params->ins_tmp_ways_stmt, 2, area); 936 996 sqlite3_bind_blob (params->ins_tmp_ways_stmt, 3, blob, blob_size, 937 997 SQLITE_STATIC); 938 998 ret = sqlite3_step (params->ins_tmp_ways_stmt); 939 999 940 1000 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 941 - return 1; 1001 + return; 942 1002 fprintf (stderr, "sqlite3_step() error: INS_TMP_WAYS\n"); 943 1003 sqlite3_finalize (params->ins_tmp_ways_stmt); 944 1004 params->ins_tmp_ways_stmt = NULL; 945 - return 0; 946 1005 } 947 1006 948 -static int 949 -eval_way (struct aux_params *params, const readosm_way * way, int area, 950 - unsigned char *blob, int blob_size) 1007 +static void 1008 +eval_way (struct aux_params *params, int area, unsigned char *blob, 1009 + int blob_size) 951 1010 { 952 - int i_tag; 953 - const readosm_tag *p_tag; 1011 + struct tag *p_tag; 954 1012 const char *p; 955 1013 int i = 0; 956 1014 const char *layer_name = NULL; 957 - const char *sub_type = NULL; 958 - const char *name = NULL; 959 - int ret; 960 - if (way->tag_count == 0) 961 - return 1; 1015 + char *sub_type = NULL; 1016 + char *name = NULL; 1017 + if (glob_way.first == NULL) 1018 + return; 962 1019 while (1) 963 1020 { 964 1021 p = base_layers[i++].name; 965 1022 if (!p) 966 1023 break; 967 - for (i_tag = 0; i_tag < way->tag_count; i_tag++) 1024 + p_tag = glob_way.first; 1025 + while (p_tag) 968 1026 { 969 - p_tag = way->tags + i_tag; 970 - if (strcmp (p_tag->key, p) == 0) 1027 + if (strcmp (p_tag->k, p) == 0) 971 1028 { 972 1029 layer_name = p; 973 - sub_type = p_tag->value; 1030 + sub_type = p_tag->v; 974 1031 } 975 - if (strcmp (p_tag->key, "name") == 0) 976 - name = p_tag->value; 1032 + if (strcmp (p_tag->k, "name") == 0) 1033 + name = p_tag->v; 1034 + p_tag = p_tag->next; 977 1035 } 978 1036 if (layer_name) 979 1037 break; 980 1038 } 981 1039 if (layer_name) 982 1040 { 983 1041 if (area) 984 - ret = polygon_layer_insert (params, layer_name, way->id, blob, 985 - blob_size, sub_type, name); 1042 + polygon_layer_insert (params, layer_name, glob_way.id, blob, 1043 + blob_size, sub_type, name); 986 1044 else 987 - ret = line_layer_insert (params, layer_name, way->id, blob, 988 - blob_size, sub_type, name); 989 - return ret; 1045 + line_layer_insert (params, layer_name, glob_way.id, blob, 1046 + blob_size, sub_type, name); 1047 + return; 990 1048 } 991 1049 else if (name != NULL) 992 1050 { 993 1051 if (area) 994 - ret = polygon_generic_insert (params, way->id, blob, blob_size, 995 - name); 1052 + polygon_generic_insert (params, glob_way.id, blob, blob_size, 1053 + name); 996 1054 else 997 - ret = 998 - line_generic_insert (params, way->id, blob, blob_size, name); 999 - return ret; 1055 + line_generic_insert (params, glob_way.id, blob, blob_size, name); 1056 + return; 1000 1057 } 1001 - return 1; 1002 1058 } 1003 1059 1004 1060 static int 1005 -is_areal_layer (const readosm_way * way) 1061 +is_areal_layer () 1006 1062 { 1007 - int i_tag; 1008 - const readosm_tag *p_tag; 1063 + struct tag *p_tag; 1009 1064 const char *p; 1010 - const char *layer_name = NULL; 1011 1065 int i = 0; 1012 - if (way->tag_count == 0) 1013 - return 0; 1066 + const char *layer_name = NULL; 1067 + if (glob_way.first == NULL) 1068 + return; 1014 1069 while (1) 1015 1070 { 1016 1071 p = base_layers[i++].name; 1017 1072 if (!p) 1018 1073 break; 1019 - for (i_tag = 0; i_tag < way->tag_count; i_tag++) 1074 + p_tag = glob_way.first; 1075 + while (p_tag) 1020 1076 { 1021 - p_tag = way->tags + i_tag; 1022 - if (strcmp (p_tag->key, p) == 0) 1077 + if (strcmp (p_tag->k, p) == 0) 1023 1078 layer_name = p; 1079 + p_tag = p_tag->next; 1024 1080 } 1025 1081 if (layer_name) 1026 1082 break; 1027 1083 } 1028 1084 if (layer_name) 1029 1085 { 1030 1086 /* possible "areal" layers */ ................................................................................ 1090 1146 gaiaGetPoint (ln->Coords, iv, &x, &y); 1091 1147 gaiaSetPoint (rng->Coords, iv, x, y); 1092 1148 } 1093 1149 gaiaFreeGeomColl (old); 1094 1150 return geom; 1095 1151 } 1096 1152 1097 -static int 1098 -consume_way (const void *user_data, const readosm_way * way) 1153 +static void 1154 +end_way (struct aux_params *params) 1099 1155 { 1100 -/* processing an OSM Way (ReadOSM callback function) */ 1101 - struct aux_params *params = (struct aux_params *) user_data; 1102 - const readosm_tag *p_tag; 1103 - int i_tag; 1156 + struct tag *p_tag; 1157 + struct tag *p_tag2; 1158 + struct nd *p_nd; 1159 + struct nd *p_nd2; 1104 1160 unsigned char *blob; 1105 1161 int blob_size; 1106 1162 int area = 0; 1107 - int ret; 1108 1163 1109 - gaiaGeomCollPtr geom = build_linestring (params->db_handle, way); 1164 + gaiaGeomCollPtr geom = build_linestring (params->db_handle); 1110 1165 if (geom) 1111 1166 { 1112 1167 geom->DeclaredType = GAIA_MULTILINESTRING; 1113 1168 gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 1114 - if (!tmp_ways_insert (params, way->id, area, blob, blob_size)) 1115 - return READOSM_ABORT; 1169 + tmp_ways_insert (params, glob_way.id, area, blob, blob_size); 1116 1170 area = 0; 1117 - for (i_tag = 0; i_tag < way->tag_count; i_tag++) 1171 + p_tag = glob_way.first; 1172 + while (p_tag) 1118 1173 { 1119 - p_tag = way->tags + i_tag; 1120 - if (strcmp (p_tag->key, "area") == 0 1121 - && strcmp (p_tag->value, "yes") == 0) 1174 + if (strcmp (p_tag->k, "area") == 0 1175 + && strcmp (p_tag->v, "yes") == 0) 1122 1176 area = 1; 1177 + p_tag = p_tag->next; 1123 1178 } 1124 1179 1125 1180 /* attempting to recover undeclared areas */ 1126 - if (is_areal_layer (way) && is_closed (geom)) 1181 + if (is_areal_layer () && is_closed (geom)) 1127 1182 area = 1; 1128 1183 1129 1184 if (area) 1130 1185 { 1131 1186 free (blob); 1132 1187 geom = convert_to_polygon (geom); 1133 1188 gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 1134 1189 } 1135 1190 gaiaFreeGeomColl (geom); 1136 - ret = eval_way (params, way, area, blob, blob_size); 1191 + eval_way (params, area, blob, blob_size); 1137 1192 free (blob); 1138 - if (ret) 1139 - return READOSM_OK; 1140 - return READOSM_ABORT; 1141 - } 1142 - return READOSM_OK; 1143 -} 1144 - 1145 -static struct way_refs * 1146 -create_way_refs (const readosm_relation * relation) 1147 -{ 1148 -/* creating and initializing the way_refs helper struct */ 1149 - int i_member; 1150 - const readosm_member *p_member; 1151 - struct way_refs *refs = NULL; 1152 - int count = 0; 1153 - 1154 - for (i_member = 0; i_member < relation->member_count; i_member++) 1155 - { 1156 - p_member = relation->members + i_member; 1157 - if (p_member->member_type == READOSM_MEMBER_WAY) 1158 - count++; 1159 - } 1160 - if (!count) 1161 - return NULL; 1162 - refs = malloc (sizeof (struct way_refs)); 1163 - if (refs == NULL) 1164 - return NULL; 1165 - refs->count = count; 1166 - refs->id = malloc (sizeof (sqlite3_int64) * refs->count); 1167 - if (refs->id == NULL) 1168 - { 1169 - free (refs); 1170 - return NULL; 1171 - } 1172 - refs->found = malloc (refs->count); 1173 - if (refs->found == NULL) 1174 - { 1175 - free (refs->id); 1176 - free (refs); 1177 - return NULL; 1178 - } 1179 - count = 0; 1180 - for (i_member = 0; i_member < relation->member_count; i_member++) 1181 - { 1182 - p_member = relation->members + i_member; 1183 - if (p_member->member_type == READOSM_MEMBER_WAY) 1184 - { 1185 - *(refs->id + count) = p_member->id; 1186 - *(refs->found + count) = 'N'; 1187 - count++; 1188 - } 1189 - } 1190 - return refs; 1191 -} 1192 - 1193 -static void 1194 -update_way_refs (struct way_refs *ways, sqlite3_int64 id, gaiaGeomCollPtr geom, 1195 - gaiaGeomCollPtr org_geom) 1196 -{ 1197 -/* updating the way_refs helper struct */ 1198 - int i_ref; 1199 - gaiaLinestringPtr ln1; 1200 - for (i_ref = 0; i_ref < ways->count; i_ref++) 1201 - { 1202 - if (*(ways->id + i_ref) == id) 1203 - { 1204 - *(ways->found + i_ref) = 'Y'; 1205 - ln1 = org_geom->FirstLinestring; 1206 - while (ln1) 1207 - { 1208 - int iv; 1209 - gaiaLinestringPtr ln2 = 1210 - gaiaAddLinestringToGeomColl (geom, ln1->Points); 1211 - for (iv = 0; iv < ln1->Points; iv++) 1212 - { 1213 - double x; 1214 - double y; 1215 - gaiaGetPoint (ln1->Coords, iv, &x, &y); 1216 - gaiaSetPoint (ln2->Coords, iv, x, y); 1217 - } 1218 - ln1 = ln1->Next; 1219 - } 1220 - } 1221 - } 1222 -} 1223 - 1224 -static void 1225 -destroy_way_refs (struct way_refs *ways) 1226 -{ 1227 -/* destroying the way_refs helper struct */ 1228 - if (ways == NULL) 1229 - return; 1230 - if (ways->id != NULL) 1231 - free (ways->id); 1232 - if (ways->found != NULL) 1233 - free (ways->found); 1234 - free (ways); 1193 + } 1194 + p_tag = glob_way.first; 1195 + while (p_tag) 1196 + { 1197 + p_tag2 = p_tag->next; 1198 + free_tag (p_tag); 1199 + p_tag = p_tag2; 1200 + } 1201 + p_nd = glob_way.first_nd; 1202 + while (p_nd) 1203 + { 1204 + p_nd2 = p_nd->next; 1205 + free (p_nd); 1206 + p_nd = p_nd2; 1207 + } 1208 + glob_way.id = -1; 1209 + glob_way.first_nd = NULL; 1210 + glob_way.last_nd = NULL; 1211 + glob_way.first = NULL; 1212 + glob_way.last = NULL; 1213 + params->current_tag = CURRENT_TAG_UNKNOWN; 1214 +} 1215 + 1216 +static void 1217 +start_nd (const char **attr) 1218 +{ 1219 + struct nd *p_nd = malloc (sizeof (struct nd)); 1220 + int i; 1221 + p_nd->ref = -1; 1222 + p_nd->found = 0; 1223 + p_nd->next = NULL; 1224 + for (i = 0; attr[i]; i += 2) 1225 + { 1226 + if (strcmp (attr[i], "ref") == 0) 1227 + p_nd->ref = atol_64 (attr[i + 1]); 1228 + } 1229 + if (glob_way.first_nd == NULL) 1230 + glob_way.first_nd = p_nd; 1231 + if (glob_way.last_nd != NULL) 1232 + glob_way.last_nd->next = p_nd; 1233 + glob_way.last_nd = p_nd; 1234 +} 1235 + 1236 +static void 1237 +start_xtag (struct aux_params *params, const char **attr) 1238 +{ 1239 + struct tag *p_tag = malloc (sizeof (struct tag)); 1240 + int i; 1241 + int len; 1242 + p_tag->k = NULL; 1243 + p_tag->v = NULL; 1244 + p_tag->next = NULL; 1245 + for (i = 0; attr[i]; i += 2) 1246 + { 1247 + if (strcmp (attr[i], "k") == 0) 1248 + { 1249 + len = strlen (attr[i + 1]); 1250 + p_tag->k = malloc (len + 1); 1251 + strcpy (p_tag->k, attr[i + 1]); 1252 + } 1253 + if (strcmp (attr[i], "v") == 0) 1254 + { 1255 + len = strlen (attr[i + 1]); 1256 + p_tag->v = malloc (len + 1); 1257 + strcpy (p_tag->v, attr[i + 1]); 1258 + } 1259 + } 1260 + if (params->current_tag == CURRENT_TAG_IS_NODE) 1261 + { 1262 + if (glob_node.first == NULL) 1263 + glob_node.first = p_tag; 1264 + if (glob_node.last != NULL) 1265 + glob_node.last->next = p_tag; 1266 + glob_node.last = p_tag; 1267 + } 1268 + if (params->current_tag == CURRENT_TAG_IS_WAY) 1269 + { 1270 + if (glob_way.first == NULL) 1271 + glob_way.first = p_tag; 1272 + if (glob_way.last != NULL) 1273 + glob_way.last->next = p_tag; 1274 + glob_way.last = p_tag; 1275 + } 1276 + if (params->current_tag == CURRENT_TAG_IS_RELATION) 1277 + { 1278 + if (glob_relation.first == NULL) 1279 + glob_relation.first = p_tag; 1280 + if (glob_relation.last != NULL) 1281 + glob_relation.last->next = p_tag; 1282 + glob_relation.last = p_tag; 1283 + } 1284 +} 1285 + 1286 +static void 1287 +start_member (const char **attr) 1288 +{ 1289 + struct member *p_member = malloc (sizeof (struct member)); 1290 + int i; 1291 + int len; 1292 + p_member->ref = -1; 1293 + p_member->is_node = 0; 1294 + p_member->is_way = 0; 1295 + p_member->found = 0; 1296 + p_member->role = NULL; 1297 + p_member->next = NULL; 1298 + for (i = 0; attr[i]; i += 2) 1299 + { 1300 + if (strcmp (attr[i], "type") == 0) 1301 + { 1302 + if (strcmp (attr[i + 1], "node") == 0) 1303 + { 1304 + p_member->is_node = 1; 1305 + p_member->is_way = 0; 1306 + } 1307 + else if (strcmp (attr[i + 1], "way") == 0) 1308 + { 1309 + p_member->is_node = 0; 1310 + p_member->is_way = 1; 1311 + } 1312 + else 1313 + { 1314 + p_member->is_node = 0; 1315 + p_member->is_way = 0; 1316 + } 1317 + } 1318 + if (strcmp (attr[i], "ref") == 0) 1319 + p_member->ref = atol_64 (attr[i + 1]); 1320 + if (strcmp (attr[i], "role") == 0) 1321 + { 1322 + len = strlen (attr[i + 1]); 1323 + p_member->role = malloc (len + 1); 1324 + strcpy (p_member->role, attr[i + 1]); 1325 + } 1326 + } 1327 + if (glob_relation.first_member == NULL) 1328 + glob_relation.first_member = p_member; 1329 + if (glob_relation.last_member != NULL) 1330 + glob_relation.last_member->next = p_member; 1331 + glob_relation.last_member = p_member; 1332 +} 1333 + 1334 +static void 1335 +start_relation (struct aux_params *params, const char **attr) 1336 +{ 1337 + int i; 1338 + glob_relation.id = -1; 1339 + glob_relation.first_member = NULL; 1340 + glob_relation.last_member = NULL; 1341 + glob_relation.first = NULL; 1342 + glob_relation.last = NULL; 1343 + for (i = 0; attr[i]; i += 2) 1344 + { 1345 + if (strcmp (attr[i], "id") == 0) 1346 + glob_relation.id = atol_64 (attr[i + 1]); 1347 + } 1348 + params->current_tag = CURRENT_TAG_IS_RELATION; 1235 1349 } 1236 1350 1237 1351 static gaiaGeomCollPtr 1238 -build_multilinestring (sqlite3 * db_handle, const readosm_relation * relation) 1352 +build_multilinestring (sqlite3 * db_handle) 1239 1353 { 1240 1354 gaiaGeomCollPtr geom; 1241 1355 int lines = 0; 1242 1356 int tbd; 1243 1357 int block = 128; 1244 1358 int base = 0; 1245 1359 int how_many; 1246 1360 int ind; 1247 1361 int ret; 1362 + int count; 1248 1363 char sql[8192]; 1249 1364 sqlite3_stmt *stmt; 1250 1365 sqlite3_int64 id; 1251 1366 const unsigned char *blob = NULL; 1252 1367 int blob_size; 1253 1368 gaiaGeomCollPtr org_geom; 1254 - static struct way_refs *refs = NULL; 1255 - int i_member; 1256 - 1257 - refs = create_way_refs (relation); 1258 - if (refs == NULL) 1259 - return NULL; 1260 - lines = refs->count; 1369 + struct member *p_member = glob_relation.first_member; 1370 + while (p_member) 1371 + { 1372 + lines++; 1373 + p_member = p_member->next; 1374 + } 1261 1375 if (!lines) 1262 1376 return NULL; 1263 1377 geom = gaiaAllocGeomColl (); 1264 1378 geom->Srid = 4326; 1265 1379 geom->DeclaredType = GAIA_MULTILINESTRING; 1266 1380 tbd = lines; 1267 1381 while (tbd > 0) 1268 1382 { 1269 1383 /* 1270 1384 / fetching ways 1271 - / requesting max 128 ways at each time 1385 + / requesting max 128 points at each time 1272 1386 */ 1273 1387 if (tbd < block) 1274 1388 how_many = tbd; 1275 1389 else 1276 1390 how_many = block; 1277 1391 strcpy (sql, "SELECT id, Geometry FROM osm_tmp_ways "); 1278 1392 strcat (sql, "WHERE id IN ("); ................................................................................ 1291 1405 sqlite3_errmsg (db_handle)); 1292 1406 gaiaFreeGeomColl (geom); 1293 1407 return NULL; 1294 1408 } 1295 1409 sqlite3_reset (stmt); 1296 1410 sqlite3_clear_bindings (stmt); 1297 1411 ind = 1; 1298 - for (i_member = 0; i_member < refs->count; i_member++) 1412 + count = 0; 1413 + p_member = glob_relation.first_member; 1414 + while (p_member) 1299 1415 { 1300 - if (i_member < base) 1301 - continue; 1302 - if (i_member >= (base + how_many)) 1416 + if (count < base) 1417 + { 1418 + count++; 1419 + p_member = p_member->next; 1420 + continue; 1421 + } 1422 + if (count >= (base + how_many)) 1303 1423 break; 1304 - sqlite3_bind_int64 (stmt, ind, *(refs->id + i_member)); 1424 + sqlite3_bind_int64 (stmt, ind, p_member->ref); 1305 1425 ind++; 1426 + count++; 1427 + p_member = p_member->next; 1306 1428 } 1307 1429 while (1) 1308 1430 { 1309 1431 /* scrolling the result set */ 1310 1432 ret = sqlite3_step (stmt); 1311 1433 if (ret == SQLITE_DONE) 1312 1434 { ................................................................................ 1319 1441 id = sqlite3_column_int64 (stmt, 0); 1320 1442 blob = sqlite3_column_blob (stmt, 1); 1321 1443 blob_size = sqlite3_column_bytes (stmt, 1); 1322 1444 org_geom = gaiaFromSpatiaLiteBlobWkb (blob, blob_size); 1323 1445 1324 1446 if (org_geom) 1325 1447 { 1326 - update_way_refs (refs, id, geom, org_geom); 1448 + p_member = glob_relation.first_member; 1449 + count = 0; 1450 + while (p_member) 1451 + { 1452 + if (p_member->ref == id) 1453 + { 1454 + gaiaLinestringPtr ln1; 1455 + p_member->found = 1; 1456 + ln1 = org_geom->FirstLinestring; 1457 + while (ln1) 1458 + { 1459 + int iv; 1460 + gaiaLinestringPtr ln2 = 1461 + gaiaAddLinestringToGeomColl 1462 + (geom, ln1->Points); 1463 + for (iv = 0; iv < ln2->Points; 1464 + iv++) 1465 + { 1466 + double x; 1467 + double y; 1468 + gaiaGetPoint (ln1->Coords, 1469 + iv, &x, &y); 1470 + gaiaSetPoint (ln2->Coords, 1471 + iv, x, y); 1472 + } 1473 + ln1 = ln1->Next; 1474 + } 1475 + } 1476 + count++; 1477 + p_member = p_member->next; 1478 + } 1327 1479 gaiaFreeGeomColl (org_geom); 1328 1480 } 1329 1481 } 1330 1482 else 1331 1483 { 1332 1484 /* some unexpected error occurred */ 1333 1485 fprintf (stderr, "sqlite3_step() error: %s\n", ................................................................................ 1338 1490 } 1339 1491 sqlite3_finalize (stmt); 1340 1492 tbd -= how_many; 1341 1493 base += how_many; 1342 1494 } 1343 1495 1344 1496 /* final checkout */ 1345 - for (ind = 0; ind < refs->count; ind++) 1497 + p_member = glob_relation.first_member; 1498 + while (p_member) 1346 1499 { 1347 - if (*(refs->found + ind) == 'N') 1500 + if (p_member->found == 0) 1348 1501 { 1349 1502 #if defined(_WIN32) || defined(__MINGW32__) 1350 1503 /* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */ 1351 - fprintf (stderr, "UNRESOLVED-WAY %I64d\n", *(refs->id + ind)); 1504 + fprintf (stderr, "UNRESOLVED-WAY %I64d\n", p_member->ref); 1352 1505 #else 1353 - fprintf (stderr, "UNRESOLVED-WAY %lld\n", *(refs->id + ind)); 1506 + fprintf (stderr, "UNRESOLVED-WAY %lld\n", p_member->ref); 1354 1507 #endif 1355 1508 gaiaFreeGeomColl (geom); 1356 - destroy_way_refs (refs); 1357 1509 return NULL; 1358 1510 } 1511 + p_member = p_member->next; 1359 1512 } 1360 - destroy_way_refs (refs); 1361 1513 return geom; 1362 1514 } 1363 1515 1364 -static int 1516 +static void 1365 1517 multiline_layer_insert (struct aux_params *params, const char *layer_name, 1366 - const char *sub_type, const readosm_relation * relation, 1367 - const char *name) 1518 + const char *sub_type, const char *name) 1368 1519 { 1369 1520 gaiaGeomCollPtr geom; 1370 1521 unsigned char *blob = NULL; 1371 1522 int blob_size; 1372 1523 struct layers *layer; 1373 1524 int i = 0; 1374 1525 while (1) 1375 1526 { 1376 1527 layer = &(base_layers[i++]); 1377 1528 if (layer->name == NULL) 1378 - return 1; 1529 + return; 1379 1530 if (strcmp (layer->name, layer_name) == 0) 1380 1531 { 1381 1532 if (layer->ok_linestring == 0) 1382 1533 { 1383 1534 layer->ok_linestring = 1; 1384 1535 create_linestring_table (params, layer); 1385 1536 } 1386 - geom = build_multilinestring (params->db_handle, relation); 1537 + geom = build_multilinestring (params->db_handle); 1387 1538 if (geom) 1388 1539 { 1389 1540 gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 1390 1541 gaiaFreeGeomColl (geom); 1391 1542 } 1392 1543 if (layer->ins_linestring_stmt && blob) 1393 1544 { 1394 1545 int ret; 1395 1546 sqlite3_reset (layer->ins_linestring_stmt); 1396 1547 sqlite3_clear_bindings (layer->ins_linestring_stmt); 1397 1548 sqlite3_bind_int64 (layer->ins_linestring_stmt, 1, 1398 - relation->id); 1549 + glob_relation.id); 1399 1550 if (sub_type == NULL) 1400 1551 sqlite3_bind_null (layer->ins_linestring_stmt, 2); 1401 1552 else 1402 1553 sqlite3_bind_text (layer->ins_linestring_stmt, 2, 1403 1554 sub_type, strlen (sub_type), 1404 1555 SQLITE_STATIC); 1405 1556 if (name == NULL) ................................................................................ 1408 1559 sqlite3_bind_text (layer->ins_linestring_stmt, 3, 1409 1560 name, strlen (name), 1410 1561 SQLITE_STATIC); 1411 1562 sqlite3_bind_blob (layer->ins_linestring_stmt, 4, blob, 1412 1563 blob_size, free); 1413 1564 ret = sqlite3_step (layer->ins_linestring_stmt); 1414 1565 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1415 - return 1; 1566 + return; 1416 1567 fprintf (stderr, 1417 1568 "sqlite3_step() error: INS_MULTILINESTRING %s\n", 1418 1569 layer_name); 1419 1570 sqlite3_finalize (layer->ins_linestring_stmt); 1420 1571 layer->ins_linestring_stmt = NULL; 1421 - return 0; 1422 1572 } 1423 - return 1; 1424 - } 1425 - } 1426 - return 1; 1427 -} 1428 - 1429 -static struct ring_refs * 1430 -create_ring_refs (const readosm_relation * relation) 1431 -{ 1432 -/* creating and initializing the ring_refs helper struct */ 1433 - int i_member; 1434 - const readosm_member *p_member; 1435 - struct ring_refs *refs = NULL; 1436 - int count = 0; 1437 - 1438 - for (i_member = 0; i_member < relation->member_count; i_member++) 1439 - { 1440 - p_member = relation->members + i_member; 1441 - if (p_member->member_type == READOSM_MEMBER_WAY) 1442 - { 1443 - if (p_member->role) 1444 - { 1445 - if (strcmp (p_member->role, "inner") == 0 1446 - || strcmp (p_member->role, "outer") == 0) 1447 - count++; 1448 - } 1449 - } 1450 - } 1451 - if (!count) 1452 - return NULL; 1453 - refs = malloc (sizeof (struct ring_refs)); 1454 - if (refs == NULL) 1455 - return NULL; 1456 - refs->count = count; 1457 - refs->id = malloc (sizeof (sqlite3_int64) * refs->count); 1458 - if (refs->id == NULL) 1459 - { 1460 - free (refs); 1461 - return NULL; 1462 - } 1463 - refs->found = malloc (refs->count); 1464 - if (refs->found == NULL) 1465 - { 1466 - free (refs->id); 1467 - free (refs); 1468 - return NULL; 1469 - } 1470 - refs->geom = malloc (sizeof (gaiaGeomCollPtr) * refs->count); 1471 - if (refs->geom == NULL) 1472 - { 1473 - free (refs->id); 1474 - free (refs->found); 1475 - free (refs); 1476 - return NULL; 1477 - } 1478 - refs->outer = malloc (refs->count); 1479 - if (refs->outer == NULL) 1480 - { 1481 - free (refs->id); 1482 - free (refs->found); 1483 - free (refs->geom); 1484 - free (refs); 1485 - return NULL; 1486 - } 1487 - memset (refs->outer, 'N', refs->count); 1488 - memset (refs->found, 'N', refs->count); 1489 - count = 0; 1490 - for (i_member = 0; i_member < relation->member_count; i_member++) 1491 - { 1492 - p_member = relation->members + i_member; 1493 - if (p_member->member_type == READOSM_MEMBER_WAY) 1494 - { 1495 - int is_outer = 0; 1496 - int ok = 0; 1497 - if (p_member->role) 1498 - { 1499 - if (strcmp (p_member->role, "inner") == 0) 1500 - ok = 1; 1501 - if (strcmp (p_member->role, "outer") == 0) 1502 - { 1503 - is_outer = 1; 1504 - ok = 1; 1505 - } 1506 - } 1507 - if (!ok) 1508 - continue; 1509 - *(refs->id + count) = p_member->id; 1510 - *(refs->geom + count) = NULL; 1511 - if (is_outer) 1512 - *(refs->outer + count) = 'Y'; 1513 - count++; 1514 - } 1515 - } 1516 - return refs; 1517 -} 1518 - 1519 -static void 1520 -update_ring_refs (struct ring_refs *rings, sqlite3_int64 id, 1521 - gaiaGeomCollPtr geom) 1522 -{ 1523 -/* updating the ring_refs helper struct */ 1524 - int i_ref; 1525 - for (i_ref = 0; i_ref < rings->count; i_ref++) 1526 - { 1527 - if (*(rings->id + i_ref) == id) 1528 - { 1529 - *(rings->found + i_ref) = 'Y'; 1530 - *(rings->geom + i_ref) = geom; 1531 - } 1532 - } 1533 -} 1534 - 1535 -static void 1536 -destroy_ring_refs (struct ring_refs *rings) 1537 -{ 1538 -/* destroying the ring_refs helper struct */ 1539 - int i; 1540 - gaiaGeomCollPtr g; 1541 - 1542 - if (rings == NULL) 1543 - return; 1544 - if (rings->id != NULL) 1545 - free (rings->id); 1546 - if (rings->found != NULL) 1547 - free (rings->found); 1548 - if (rings->outer != NULL) 1549 - free (rings->outer); 1550 - if (rings->geom != NULL) 1551 - { 1552 - for (i = 0; i < rings->count; i++) 1553 - { 1554 - g = *(rings->geom + i); 1555 - if (g) 1556 - gaiaFreeGeomColl (g); 1557 - } 1558 - free (rings->geom); 1559 - } 1560 - free (rings); 1573 + return; 1574 + } 1575 + } 1561 1576 } 1562 1577 1563 1578 static gaiaGeomCollPtr 1564 -build_multipolygon (sqlite3 * db_handle, const readosm_relation * relation) 1579 +build_multipolygon (sqlite3 * db_handle) 1565 1580 { 1566 1581 gaiaGeomCollPtr geom; 1567 - gaiaPolygonPtr pg = NULL; 1582 + gaiaPolygonPtr pg2 = NULL; 1568 1583 int rings = 0; 1569 1584 int interiors = 0; 1570 1585 int exteriors = 0; 1571 1586 int ext_pts; 1572 1587 int ib = 0; 1573 1588 int tbd; 1574 1589 int block = 128; 1575 1590 int base = 0; 1576 1591 int how_many; 1577 1592 int ind; 1578 1593 int ret; 1594 + int count; 1579 1595 char sql[8192]; 1580 1596 sqlite3_stmt *stmt; 1581 1597 sqlite3_int64 id; 1582 1598 1583 1599 const unsigned char *blob = NULL; 1584 1600 int blob_size; 1585 1601 gaiaGeomCollPtr org_geom; 1586 - int i_member; 1587 - const readosm_member *p_member; 1588 - struct ring_refs *refs = NULL; 1589 - 1590 - for (i_member = 0; i_member < relation->member_count; i_member++) 1602 + struct member *p_member = glob_relation.first_member; 1603 + while (p_member) 1591 1604 { 1592 - p_member = relation->members + i_member; 1593 - if (p_member->member_type == READOSM_MEMBER_WAY) 1605 + rings++; 1606 + if (p_member->role) 1594 1607 { 1595 - rings++; 1596 - if (p_member->role) 1597 - { 1598 - if (strcmp (p_member->role, "inner") == 0) 1599 - interiors++; 1600 - if (strcmp (p_member->role, "outer") == 0) 1601 - exteriors++; 1602 - } 1608 + if (strcmp (p_member->role, "inner") == 0) 1609 + interiors++; 1610 + if (strcmp (p_member->role, "outer") == 0) 1611 + exteriors++; 1603 1612 } 1613 + p_member = p_member->next; 1604 1614 } 1605 1615 if (!rings) 1606 1616 return NULL; 1607 1617 if (exteriors != 1) 1608 1618 return NULL; 1609 1619 if (interiors + 1 != rings) 1610 1620 return NULL; 1611 - refs = create_ring_refs (relation); 1612 1621 geom = gaiaAllocGeomColl (); 1613 1622 geom->Srid = 4326; 1614 1623 geom->DeclaredType = GAIA_MULTIPOLYGON; 1615 1624 tbd = rings; 1616 1625 while (tbd > 0) 1617 1626 { 1618 1627 /* ................................................................................ 1640 1649 sqlite3_errmsg (db_handle)); 1641 1650 gaiaFreeGeomColl (geom); 1642 1651 return NULL; 1643 1652 } 1644 1653 sqlite3_reset (stmt); 1645 1654 sqlite3_clear_bindings (stmt); 1646 1655 ind = 1; 1647 - 1648 - for (i_member = 0; i_member < refs->count; i_member++) 1656 + count = 0; 1657 + p_member = glob_relation.first_member; 1658 + while (p_member) 1649 1659 { 1650 - if (i_member < base) 1651 - continue; 1652 - if (i_member >= (base + how_many)) 1660 + if (count < base) 1661 + { 1662 + count++; 1663 + p_member = p_member->next; 1664 + continue; 1665 + } 1666 + if (count >= (base + how_many)) 1653 1667 break; 1654 - sqlite3_bind_int64 (stmt, ind, *(refs->id + i_member)); 1668 + sqlite3_bind_int64 (stmt, ind, p_member->ref); 1655 1669 ind++; 1670 + count++; 1671 + p_member = p_member->next; 1656 1672 } 1657 1673 while (1) 1658 1674 { 1659 1675 /* scrolling the result set */ 1660 1676 ret = sqlite3_step (stmt); 1661 1677 if (ret == SQLITE_DONE) 1662 1678 { ................................................................................ 1667 1683 { 1668 1684 /* ok, we've just fetched a valid row */ 1669 1685 id = sqlite3_column_int64 (stmt, 0); 1670 1686 blob = sqlite3_column_blob (stmt, 2); 1671 1687 blob_size = sqlite3_column_bytes (stmt, 2); 1672 1688 org_geom = gaiaFromSpatiaLiteBlobWkb (blob, blob_size); 1673 1689 if (org_geom) 1674 - update_ring_refs (refs, id, org_geom); 1690 + { 1691 + while (p_member) 1692 + { 1693 + if (p_member->ref == id) 1694 + { 1695 + p_member->geom = org_geom; 1696 + p_member->found = 1; 1697 + } 1698 + p_member = p_member->next; 1699 + } 1700 + } 1675 1701 } 1676 1702 else 1677 1703 { 1678 1704 /* some unexpected error occurred */ 1679 1705 fprintf (stderr, "sqlite3_step() error: %s\n", 1680 1706 sqlite3_errmsg (db_handle)); 1681 1707 sqlite3_finalize (stmt); ................................................................................ 1685 1711 sqlite3_finalize (stmt); 1686 1712 tbd -= how_many; 1687 1713 base += how_many; 1688 1714 } 1689 1715 1690 1716 /* final checkout */ 1691 1717 ext_pts = 0; 1692 - for (i_member = 0; i_member < refs->count; i_member++) 1718 + p_member = glob_relation.first_member; 1719 + while (p_member) 1693 1720 { 1694 - if (*(refs->found + i_member) == 'N') 1721 + if (p_member->found == 0) 1695 1722 { 1696 - id = *(refs->id + i_member); 1697 1723 #if defined(_WIN32) || defined(__MINGW32__) 1698 1724 /* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */ 1699 - fprintf (stderr, "UNRESOLVED-WAY %I64d\n", id); 1725 + fprintf (stderr, "UNRESOLVED-WAY %I64d\n", p_member->ref); 1700 1726 #else 1701 - fprintf (stderr, "UNRESOLVED-WAY %lld\n", id); 1727 + fprintf (stderr, "UNRESOLVED-WAY %lld\n", p_member->ref); 1702 1728 #endif 1703 1729 gaiaFreeGeomColl (geom); 1704 - destroy_ring_refs (refs); 1705 1730 return NULL; 1706 1731 } 1707 - if (*(refs->outer + i_member) == 'Y') 1732 + if (strcmp (p_member->role, "outer") == 0) 1708 1733 { 1709 - gaiaGeomCollPtr g = *(refs->geom + i_member); 1710 - if (g) 1734 + if (p_member->geom) 1711 1735 { 1712 - if (g->FirstLinestring) 1713 - ext_pts = g->FirstLinestring->Points; 1736 + if (p_member->geom->FirstPolygon) 1737 + ext_pts = 1738 + p_member->geom->FirstPolygon->Exterior->Points; 1714 1739 } 1715 1740 } 1741 + p_member = p_member->next; 1716 1742 } 1717 1743 if (!ext_pts) 1718 1744 { 1719 1745 #if defined(_WIN32) || defined(__MINGW32__) 1720 1746 /* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */ 1721 - fprintf (stderr, "ILLEGAL MULTIPOLYGON %I64d\n", id); 1747 + fprintf (stderr, "ILLEGAL MULTIPOLYGON %I64d\n", p_member->ref); 1722 1748 #else 1723 - fprintf (stderr, "ILLEGAL MULTIPOLYGON %lld\n", id); 1749 + fprintf (stderr, "ILLEGAL MULTIPOLYGON %lld\n", p_member->ref); 1724 1750 #endif 1725 1751 gaiaFreeGeomColl (geom); 1726 - destroy_ring_refs (refs); 1727 1752 return NULL; 1728 1753 } 1729 1754 1730 - pg = gaiaAddPolygonToGeomColl (geom, ext_pts, interiors); 1731 - for (i_member = 0; i_member < refs->count; i_member++) 1732 - { 1733 - gaiaLinestringPtr ln; 1734 - int iv; 1735 - gaiaRingPtr rng; 1736 - org_geom = *(refs->geom + i_member); 1737 - ln = org_geom->FirstLinestring; 1738 - if (*(refs->outer + i_member) == 'Y') 1739 - rng = pg->Exterior; 1740 - else 1741 - rng = gaiaAddInteriorRing (pg, ib++, ln->Points); 1742 - for (iv = 0; iv < ln->Points; iv++) 1743 - { 1744 - double x; 1745 - double y; 1746 - gaiaGetPoint (ln->Coords, iv, &x, &y); 1747 - gaiaSetPoint (rng->Coords, iv, x, y); 1748 - } 1749 - } 1750 - destroy_ring_refs (refs); 1755 + pg2 = gaiaAddPolygonToGeomColl (geom, ext_pts, interiors); 1756 + p_member = glob_relation.first_member; 1757 + while (p_member) 1758 + { 1759 + gaiaPolygonPtr pg1; 1760 + pg1 = org_geom->FirstPolygon; 1761 + while (pg1) 1762 + { 1763 + int iv; 1764 + gaiaRingPtr rng1 = pg1->Exterior; 1765 + gaiaRingPtr rng2; 1766 + if (strcmp (p_member->role, "outer") == 0) 1767 + rng2 = pg2->Exterior; 1768 + else 1769 + rng2 = pg2->Interiors + ib++; 1770 + for (iv = 0; iv < rng2->Points; iv++) 1771 + { 1772 + double x; 1773 + double y; 1774 + gaiaGetPoint (rng1->Coords, iv, &x, &y); 1775 + gaiaSetPoint (rng2->Coords, iv, x, y); 1776 + } 1777 + pg1 = pg1->Next; 1778 + } 1779 + p_member = p_member->next; 1780 + } 1751 1781 return geom; 1752 1782 } 1753 1783 1754 -static int 1784 +static void 1755 1785 multipolygon_layer_insert (struct aux_params *params, const char *layer_name, 1756 - const char *sub_type, 1757 - const readosm_relation * relation, const char *name) 1786 + const char *sub_type, const char *name) 1758 1787 { 1759 1788 gaiaGeomCollPtr geom; 1760 1789 unsigned char *blob = NULL; 1761 1790 int blob_size; 1762 1791 struct layers *layer; 1763 1792 int i = 0; 1764 1793 while (1) 1765 1794 { 1766 1795 layer = &(base_layers[i++]); 1767 1796 if (layer->name == NULL) 1768 - return 1; 1797 + return; 1769 1798 if (strcmp (layer->name, layer_name) == 0) 1770 1799 { 1771 1800 if (layer->ok_polygon == 0) 1772 1801 { 1773 1802 layer->ok_polygon = 1; 1774 1803 create_polygon_table (params, layer); 1775 1804 } 1776 - geom = build_multipolygon (params->db_handle, relation); 1805 + geom = build_multipolygon (params->db_handle); 1777 1806 if (geom) 1778 1807 { 1779 1808 gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 1780 1809 gaiaFreeGeomColl (geom); 1781 1810 } 1782 1811 if (layer->ins_polygon_stmt) 1783 1812 { 1784 1813 int ret; 1785 1814 sqlite3_reset (layer->ins_polygon_stmt); 1786 1815 sqlite3_clear_bindings (layer->ins_polygon_stmt); 1787 1816 sqlite3_bind_int64 (layer->ins_polygon_stmt, 1, 1788 - relation->id); 1817 + glob_relation.id); 1789 1818 if (sub_type == NULL) 1790 1819 sqlite3_bind_null (layer->ins_polygon_stmt, 2); 1791 1820 else 1792 1821 sqlite3_bind_text (layer->ins_polygon_stmt, 2, 1793 1822 sub_type, strlen (sub_type), 1794 1823 SQLITE_STATIC); 1795 1824 if (name == NULL) ................................................................................ 1797 1826 else 1798 1827 sqlite3_bind_text (layer->ins_polygon_stmt, 3, name, 1799 1828 strlen (name), SQLITE_STATIC); 1800 1829 sqlite3_bind_blob (layer->ins_polygon_stmt, 4, blob, 1801 1830 blob_size, SQLITE_STATIC); 1802 1831 ret = sqlite3_step (layer->ins_polygon_stmt); 1803 1832 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1804 - return 1; 1833 + return; 1805 1834 fprintf (stderr, 1806 1835 "sqlite3_step() error: INS_MULTIPOLYGON %s\n", 1807 1836 layer_name); 1808 1837 sqlite3_finalize (layer->ins_polygon_stmt); 1809 1838 layer->ins_polygon_stmt = NULL; 1810 - return 0; 1811 1839 } 1812 - return 1; 1840 + return; 1813 1841 } 1814 1842 } 1815 - return 1; 1816 1843 } 1817 1844 1818 -static int 1819 -multiline_generic_insert (struct aux_params *params, 1820 - const readosm_relation * relation, const char *name) 1845 +static void 1846 +multiline_generic_insert (struct aux_params *params, const char *name) 1821 1847 { 1822 1848 gaiaGeomCollPtr geom; 1823 1849 unsigned char *blob = NULL; 1824 1850 int blob_size; 1825 - geom = build_multilinestring (params->db_handle, relation); 1851 + geom = build_multilinestring (params->db_handle); 1826 1852 if (geom) 1827 1853 { 1828 1854 gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 1829 1855 gaiaFreeGeomColl (geom); 1830 1856 } 1831 1857 if (params->ins_generic_linestring_stmt && blob) 1832 1858 { 1833 1859 int ret; 1834 1860 sqlite3_reset (params->ins_generic_linestring_stmt); 1835 1861 sqlite3_clear_bindings (params->ins_generic_linestring_stmt); 1836 1862 sqlite3_bind_int64 (params->ins_generic_linestring_stmt, 1, 1837 - relation->id); 1863 + glob_relation.id); 1838 1864 if (name == NULL) 1839 1865 sqlite3_bind_null (params->ins_generic_linestring_stmt, 2); 1840 1866 else 1841 1867 sqlite3_bind_text (params->ins_generic_linestring_stmt, 2, name, 1842 1868 strlen (name), SQLITE_STATIC); 1843 1869 sqlite3_bind_blob (params->ins_generic_linestring_stmt, 3, blob, 1844 1870 blob_size, SQLITE_STATIC); 1845 1871 ret = sqlite3_step (params->ins_generic_linestring_stmt); 1846 1872 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1847 - return 1; 1873 + return; 1848 1874 fprintf (stderr, 1849 1875 "sqlite3_step() error: INS_GENERIC_MULTILINESTRING\n"); 1850 1876 sqlite3_finalize (params->ins_generic_linestring_stmt); 1851 1877 params->ins_generic_linestring_stmt = NULL; 1852 - return 0; 1853 1878 } 1854 - return 1; 1855 1879 } 1856 1880 1857 -static int 1858 -multipolygon_generic_insert (struct aux_params *params, 1859 - const readosm_relation * relation, 1860 - const char *name) 1881 +static void 1882 +multipolygon_generic_insert (struct aux_params *params, const char *name) 1861 1883 { 1862 1884 gaiaGeomCollPtr geom; 1863 1885 unsigned char *blob = NULL; 1864 1886 int blob_size; 1865 - geom = build_multipolygon (params->db_handle, relation); 1887 + geom = build_multipolygon (params->db_handle); 1866 1888 if (geom) 1867 1889 { 1868 1890 gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 1869 1891 gaiaFreeGeomColl (geom); 1870 1892 } 1871 1893 if (params->ins_generic_polygon_stmt && blob) 1872 1894 { 1873 1895 int ret; 1874 1896 sqlite3_reset (params->ins_generic_polygon_stmt); 1875 1897 sqlite3_clear_bindings (params->ins_generic_polygon_stmt); 1876 1898 sqlite3_bind_int64 (params->ins_generic_polygon_stmt, 1, 1877 - relation->id); 1899 + glob_relation.id); 1878 1900 if (name == NULL) 1879 1901 sqlite3_bind_null (params->ins_generic_polygon_stmt, 2); 1880 1902 else 1881 1903 sqlite3_bind_text (params->ins_generic_polygon_stmt, 2, name, 1882 1904 strlen (name), SQLITE_STATIC); 1883 1905 sqlite3_bind_blob (params->ins_generic_polygon_stmt, 3, blob, 1884 1906 blob_size, SQLITE_STATIC); 1885 1907 ret = sqlite3_step (params->ins_generic_polygon_stmt); 1886 1908 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1887 - return 1; 1909 + return; 1888 1910 fprintf (stderr, "sqlite3_step() error: INS_GENERIC_MULTIPOLYGON\n"); 1889 1911 sqlite3_finalize (params->ins_generic_polygon_stmt); 1890 1912 params->ins_generic_polygon_stmt = NULL; 1891 - return 0; 1892 1913 } 1893 - return 1; 1894 1914 } 1895 1915 1896 -static int 1897 -consume_relation (const void *user_data, const readosm_relation * relation) 1916 +static void 1917 +eval_relation (struct aux_params *params) 1898 1918 { 1899 -/* processing an OSM Relation (ReadOSM callback function) */ 1900 - struct aux_params *params = (struct aux_params *) user_data; 1901 - const readosm_tag *p_tag; 1919 + struct tag *p_tag; 1902 1920 const char *p; 1903 - int i_tag = 0; 1904 - int i_lyr = 0; 1905 - int ret; 1921 + int i = 0; 1906 1922 const char *layer_name = NULL; 1907 - const char *sub_type = NULL; 1908 - const char *name = NULL; 1923 + char *sub_type = NULL; 1924 + char *name = NULL; 1909 1925 int multipolygon = 0; 1910 - 1926 + if (glob_relation.first == NULL) 1927 + return; 1911 1928 while (1) 1912 1929 { 1913 - p = base_layers[i_lyr++].name; 1930 + p = base_layers[i++].name; 1914 1931 if (!p) 1915 1932 break; 1916 - for (i_tag = 0; i_tag < relation->tag_count; i_tag++) 1933 + p_tag = glob_relation.first; 1934 + while (p_tag) 1917 1935 { 1918 - p_tag = relation->tags + i_tag; 1919 - if (strcmp (p_tag->key, p) == 0) 1936 + if (strcmp (p_tag->k, p) == 0) 1920 1937 { 1921 1938 layer_name = p; 1922 - sub_type = p_tag->value; 1939 + sub_type = p_tag->v; 1923 1940 } 1924 - if (strcmp (p_tag->key, "name") == 0) 1925 - name = p_tag->value; 1926 - if (strcmp (p_tag->key, "type") == 0 1927 - && strcmp (p_tag->value, "multipolygon") == 0) 1941 + if (strcmp (p_tag->k, "name") == 0) 1942 + name = p_tag->v; 1943 + if (strcmp (p_tag->k, "type") == 0 1944 + && strcmp (p_tag->v, "multipolygon") == 0) 1928 1945 multipolygon = 1; 1946 + p_tag = p_tag->next; 1929 1947 } 1930 1948 if (layer_name) 1931 1949 break; 1932 1950 } 1933 - 1934 1951 if (layer_name) 1935 1952 { 1936 1953 if (multipolygon) 1937 - ret = 1938 - multipolygon_layer_insert (params, layer_name, sub_type, 1939 - relation, name); 1954 + multipolygon_layer_insert (params, layer_name, sub_type, name); 1940 1955 else 1941 - ret = 1942 - multiline_layer_insert (params, layer_name, sub_type, 1943 - relation, name); 1944 - if (ret) 1945 - return READOSM_OK; 1946 - return READOSM_ABORT; 1956 + multiline_layer_insert (params, layer_name, sub_type, name); 1957 + return; 1947 1958 } 1948 1959 else if (name != NULL) 1949 1960 { 1950 1961 if (multipolygon) 1951 - ret = multipolygon_generic_insert (params, relation, name); 1962 + multipolygon_generic_insert (params, name); 1952 1963 else 1953 - ret = multiline_generic_insert (params, relation, name); 1954 - if (ret) 1955 - return READOSM_OK; 1956 - return READOSM_ABORT; 1964 + multiline_generic_insert (params, name); 1965 + return; 1957 1966 } 1958 - return READOSM_OK; 1967 +} 1968 + 1969 +static void 1970 +end_relation (struct aux_params *params) 1971 +{ 1972 + struct tag *p_tag; 1973 + struct tag *p_tag2; 1974 + struct member *p_member; 1975 + struct member *p_member2; 1976 + eval_relation (params); 1977 + p_tag = glob_relation.first; 1978 + while (p_tag) 1979 + { 1980 + p_tag2 = p_tag->next; 1981 + free_tag (p_tag); 1982 + p_tag = p_tag2; 1983 + } 1984 + p_member = glob_relation.first_member; 1985 + while (p_member) 1986 + { 1987 + p_member2 = p_member->next; 1988 + free_member (p_member); 1989 + p_member = p_member2; 1990 + } 1991 + glob_relation.id = -1; 1992 + glob_relation.first_member = NULL; 1993 + glob_relation.last_member = NULL; 1994 + glob_relation.first = NULL; 1995 + glob_relation.last = NULL; 1996 + params->current_tag = CURRENT_TAG_UNKNOWN; 1997 +} 1998 + 1999 +static void 2000 +start_tag (void *data, const char *el, const char **attr) 2001 +{ 2002 + struct aux_params *params = (struct aux_params *) data; 2003 + if (strcmp (el, "node") == 0) 2004 + start_node (params, attr); 2005 + if (strcmp (el, "tag") == 0) 2006 + start_xtag (params, attr); 2007 + if (strcmp (el, "way") == 0) 2008 + start_way (params, attr); 2009 + if (strcmp (el, "nd") == 0) 2010 + start_nd (attr); 2011 + if (strcmp (el, "relation") == 0) 2012 + start_relation (params, attr); 2013 + if (strcmp (el, "member") == 0) 2014 + start_member (attr); 2015 +} 2016 + 2017 +static void 2018 +end_tag (void *data, const char *el) 2019 +{ 2020 + struct aux_params *params = (struct aux_params *) data; 2021 + if (strcmp (el, "node") == 0) 2022 + end_node (params); 2023 + if (strcmp (el, "way") == 0) 2024 + end_way (params); 2025 + if (strcmp (el, "relation") == 0) 2026 + end_relation (params); 1959 2027 } 1960 2028 1961 2029 static void 1962 2030 db_vacuum (sqlite3 * db_handle) 1963 2031 { 1964 2032 int ret; 1965 2033 char *sql_err = NULL; ................................................................................ 2312 2380 fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 2313 2381 sqlite3_free (sql_err); 2314 2382 return; 2315 2383 } 2316 2384 } 2317 2385 2318 2386 static void 2319 -create_sql_stmts (struct aux_params *params, int journal_off) 2387 +create_sql_stmts (struct aux_params *params) 2320 2388 { 2321 2389 sqlite3_stmt *ins_tmp_nodes_stmt; 2322 2390 sqlite3_stmt *ins_tmp_ways_stmt; 2323 2391 sqlite3_stmt *ins_generic_point_stmt; 2324 2392 sqlite3_stmt *ins_addresses_stmt; 2325 2393 sqlite3_stmt *ins_generic_linestring_stmt; 2326 2394 sqlite3_stmt *ins_generic_polygon_stmt; 2327 2395 char sql[1024]; 2328 2396 int ret; 2329 2397 char *sql_err = NULL; 2330 2398 2331 - if (journal_off) 2332 - { 2333 - /* disabling the journal: unsafe but faster */ 2334 - ret = 2335 - sqlite3_exec (params->db_handle, "PRAGMA journal_mode = OFF", 2336 - NULL, NULL, &sql_err); 2337 - if (ret != SQLITE_OK) 2338 - { 2339 - fprintf (stderr, "PRAGMA journal_mode=OFF error: %s\n", 2340 - sql_err); 2341 - sqlite3_free (sql_err); 2342 - return; 2343 - } 2344 - } 2345 - 2346 2399 /* the complete operation is handled as an unique SQL Transaction */ 2347 2400 ret = sqlite3_exec (params->db_handle, "BEGIN", NULL, NULL, &sql_err); 2348 2401 if (ret != SQLITE_OK) 2349 2402 { 2350 2403 fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 2351 2404 sqlite3_free (sql_err); 2352 2405 return; ................................................................................ 2528 2581 fprintf (stderr, "\n\nusage: spatialite_osm_map ARGLIST\n"); 2529 2582 fprintf (stderr, 2530 2583 "==============================================================\n"); 2531 2584 fprintf (stderr, 2532 2585 "-h or --help print this help message\n"); 2533 2586 fprintf (stderr, "-o or --osm-path pathname the OSM-XML file path\n"); 2534 2587 fprintf (stderr, 2535 - " both OSM-XML (*.osm) and OSM-ProtoBuf\n"); 2536 - fprintf (stderr, 2537 - " (*.osm.pbf) are indifferenctly supported.\n\n"); 2538 - fprintf (stderr, 2539 2588 "-d or --db-path pathname the SpatiaLite DB path\n\n"); 2540 2589 fprintf (stderr, "you can specify the following options as well\n"); 2541 2590 fprintf (stderr, 2542 2591 "-cs or --cache-size num DB cache size (how many pages)\n"); 2543 2592 fprintf (stderr, 2544 2593 "-m or --in-memory using IN-MEMORY database\n"); 2545 2594 fprintf (stderr, 2546 2595 "-n or --no-spatial-index suppress R*Trees generation\n"); 2547 - fprintf (stderr, 2548 - "-jo or --journal-off unsafe [but faster] mode\n"); 2549 2596 } 2550 2597 2551 2598 int 2552 2599 main (int argc, char *argv[]) 2553 2600 { 2554 2601 /* the MAIN function simply perform arguments checking */ 2555 2602 sqlite3 *handle; 2556 2603 int i; 2557 2604 int next_arg = ARG_NONE; 2558 2605 const char *osm_path = NULL; 2559 2606 const char *db_path = NULL; 2560 2607 int in_memory = 0; 2561 2608 int cache_size = 0; 2562 - int journal_off = 0; 2563 2609 int spatial_index = 1; 2564 2610 int error = 0; 2611 + char Buff[BUFFSIZE]; 2612 + int done = 0; 2613 + int len; 2614 + XML_Parser parser; 2565 2615 struct aux_params params; 2566 - const void *osm_handle; 2616 + FILE *xml_file; 2617 + int last_line_no = 0; 2618 + int curr_line_no = 0; 2567 2619 2568 2620 /* initializing the aux-struct */ 2569 2621 params.db_handle = NULL; 2570 2622 params.ins_tmp_nodes_stmt = NULL; 2571 2623 params.ins_tmp_ways_stmt = NULL; 2572 2624 params.ins_generic_point_stmt = NULL; 2573 2625 params.ins_addresses_stmt = NULL; 2574 2626 params.ins_generic_linestring_stmt = NULL; 2575 2627 params.ins_generic_polygon_stmt = NULL; 2576 - 2628 + params.current_tag = CURRENT_TAG_UNKNOWN; 2577 2629 2578 2630 for (i = 1; i < argc; i++) 2579 2631 { 2580 2632 /* parsing the invocation arguments */ 2581 2633 if (next_arg != ARG_NONE) 2582 2634 { 2583 2635 switch (next_arg) ................................................................................ 2629 2681 } 2630 2682 if (strcasecmp (argv[i], "-m") == 0) 2631 2683 { 2632 2684 in_memory = 1; 2633 2685 next_arg = ARG_NONE; 2634 2686 continue; 2635 2687 } 2636 - if (strcasecmp (argv[i], "--in-memory") == 0) 2688 + if (strcasecmp (argv[i], "-in-memory") == 0) 2637 2689 { 2638 2690 in_memory = 1; 2639 - next_arg = ARG_NONE; 2640 - continue; 2641 - } 2642 - if (strcasecmp (argv[i], "-jo") == 0) 2643 - { 2644 - journal_off = 1; 2645 - next_arg = ARG_NONE; 2646 - continue; 2647 - } 2648 - if (strcasecmp (argv[i], "--journal-off") == 0) 2649 - { 2650 - journal_off = 1; 2651 2691 next_arg = ARG_NONE; 2652 2692 continue; 2653 2693 } 2654 2694 if (strcasecmp (argv[i], "-n") == 0) 2655 2695 { 2656 2696 spatial_index = 0; 2657 2697 next_arg = ARG_NONE; ................................................................................ 2732 2772 sqlite3_close (handle); 2733 2773 handle = mem_db_handle; 2734 2774 printf ("\nusing IN-MEMORY database\n"); 2735 2775 } 2736 2776 params.db_handle = handle; 2737 2777 2738 2778 /* creating SQL prepared statements */ 2739 - create_sql_stmts (¶ms, journal_off); 2779 + create_sql_stmts (¶ms); 2740 2780 2741 -/* parsing the input OSM-file */ 2742 - if (readosm_open (osm_path, &osm_handle) != READOSM_OK) 2781 +/* XML parsing */ 2782 + xml_file = fopen (osm_path, "rb"); 2783 + if (!xml_file) 2743 2784 { 2744 2785 fprintf (stderr, "cannot open %s\n", osm_path); 2745 - finalize_sql_stmts (¶ms); 2746 2786 sqlite3_close (handle); 2747 - readosm_close (osm_handle); 2787 + return -1; 2788 + } 2789 + parser = XML_ParserCreate (NULL); 2790 + if (!parser) 2791 + { 2792 + fprintf (stderr, "Couldn't allocate memory for parser\n"); 2793 + sqlite3_close (handle); 2748 2794 return -1; 2749 2795 } 2750 - if (readosm_parse 2751 - (osm_handle, ¶ms, consume_node, consume_way, 2752 - consume_relation) != READOSM_OK) 2796 + XML_SetUserData (parser, ¶ms); 2797 + XML_SetElementHandler (parser, start_tag, end_tag); 2798 + while (!done) 2753 2799 { 2754 - fprintf (stderr, "unrecoverable error while parsing %s\n", osm_path); 2755 - finalize_sql_stmts (¶ms); 2756 - sqlite3_close (handle); 2757 - readosm_close (osm_handle); 2758 - return -1; 2800 + len = fread (Buff, 1, BUFFSIZE, xml_file); 2801 + if (ferror (xml_file)) 2802 + { 2803 + fprintf (stderr, "XML Read error\n"); 2804 + sqlite3_close (handle); 2805 + return -1; 2806 + } 2807 + done = feof (xml_file); 2808 + if (!XML_Parse (parser, Buff, len, done)) 2809 + { 2810 + fprintf (stderr, "Parse error at line %d:\n%s\n", 2811 + (int) XML_GetCurrentLineNumber (parser), 2812 + XML_ErrorString (XML_GetErrorCode (parser))); 2813 + sqlite3_close (handle); 2814 + return -1; 2815 + } 2816 + curr_line_no = (int) XML_GetCurrentLineNumber (parser); 2817 + if ((curr_line_no - last_line_no) > 1000) 2818 + { 2819 + last_line_no = curr_line_no; 2820 + printf ("Parsing XML line: %d\r", curr_line_no); 2821 + fflush (stdout); 2822 + } 2759 2823 } 2760 - readosm_close (osm_handle); 2824 + XML_ParserFree (parser); 2825 + fclose (xml_file); 2826 + printf (" \r"); 2761 2827 2762 2828 /* finalizing SQL prepared statements */ 2763 2829 finalize_sql_stmts (¶ms); 2764 2830 2765 2831 /* dropping the OSM_TMP_xx tables */ 2766 2832 db_cleanup (handle); 2767 2833
Changes to spatialite_osm_net.c.
39 39 #include <spatialite/sqlite3.h> 40 40 #else 41 41 #include <sqlite3.h> 42 42 #endif 43 43 44 44 #include <spatialite/gaiageo.h> 45 45 #include <spatialite.h> 46 -#include <readosm.h> 47 46 48 47 #define ARG_NONE 0 49 48 #define ARG_OSM_PATH 1 50 49 #define ARG_DB_PATH 2 51 50 #define ARG_TABLE 3 52 51 #define ARG_CACHE_SIZE 4 53 -#define ARG_TEMPLATE_PATH 5 54 - 55 -#define NODE_STRAT_NONE 0 56 -#define NODE_STRAT_ALL 1 57 -#define NODE_STRAT_ENDS 2 58 -#define ONEWAY_STRAT_NONE 0 59 -#define ONEWAY_STRAT_FULL 1 60 -#define ONEWAY_STRAT_NO_ROUND 2 61 -#define ONEWAY_STRAT_NO_MOTOR 3 62 -#define ONEWAY_STRAT_NO_BOTH 4 63 - 64 -struct aux_speed 65 -{ 66 -/* an auxiliary struct for Speeds */ 67 - char *class_name; 68 - double speed; 69 - struct aux_speed *next; 52 + 53 +#define MAX_TAG 16 54 + 55 +#if defined(_WIN32) && !defined(__MINGW32__) 56 +#define strcasecmp _stricmp 57 +#endif /* not WIN32 */ 58 + 59 +#if defined(_WIN32) 60 +#define atol_64 _atoi64 61 +#else 62 +#define atol_64 atoll 63 +#endif 64 + 65 +struct dup_node_id 66 +{ 67 + sqlite3_int64 id; 68 + struct dup_node_id *next; 69 +}; 70 + 71 +struct dup_node 72 +{ 73 + double lon; 74 + double lat; 75 + int refcount; 76 + struct dup_node_id *first; 77 + struct dup_node_id *last; 78 + struct dup_node *next; 79 +}; 80 + 81 +struct kv 82 +{ 83 + char *k; 84 + char *v; 85 + struct kv *next; 86 +}; 87 + 88 +struct node_ref 89 +{ 90 + sqlite3_int64 id; 91 + sqlite3_int64 alias; 92 + double lat; 93 + double lon; 94 + int refcount; 95 + int ignore; 96 + struct node_ref *next; 97 +}; 98 + 99 +struct arc 100 +{ 101 + sqlite3_int64 from; 102 + sqlite3_int64 to; 103 + gaiaDynamicLinePtr dyn; 104 + gaiaGeomCollPtr geom; 105 + double length; 106 + double cost; 107 + struct arc *next; 70 108 }; 71 109 72 -struct aux_class 110 +struct way 73 111 { 74 -/* an auxiliary struct for road Classes */ 75 - char *class_name; 76 - char *sub_class; 77 - struct aux_class *next; 112 + sqlite3_int64 id; 113 + char *class; 114 + char *name; 115 + int oneway; 116 + int reverse; 117 + struct node_ref *first; 118 + struct node_ref *last; 119 + struct kv *first_kv; 120 + struct kv *last_kv; 121 + struct arc *first_arc; 122 + struct arc *last_arc; 78 123 }; 79 124 80 -struct aux_params 125 +struct check_tag 81 126 { 82 -/* an auxiliary struct used for OSM parsing */ 83 - sqlite3 *db_handle; 84 - const char *table; 85 - int noding_strategy; 86 - int oneway_strategy; 87 - struct aux_speed *first_speed; 88 - struct aux_speed *last_speed; 89 - double default_speed; 90 - struct aux_class *first_include; 91 - struct aux_class *last_include; 92 - struct aux_class *first_ignore; 93 - struct aux_class *last_ignore; 94 - sqlite3_stmt *ins_tmp_nodes_stmt; 95 - sqlite3_stmt *upd_tmp_nodes_stmt; 96 - sqlite3_stmt *rd_tmp_nodes_stmt; 97 - sqlite3_stmt *ins_arcs_stmt; 127 + char buf[MAX_TAG + 1]; 128 + int pos; 129 + int max; 98 130 }; 99 131 100 132 static void 101 -save_current_line (gaiaGeomCollPtr geom, gaiaDynamicLinePtr dyn) 102 -{ 103 -/* inserting a GraphArc from a splitted Way */ 104 - gaiaPointPtr pt; 105 - gaiaLinestringPtr ln; 106 - int iv; 107 - int points = 0; 108 - 109 - pt = dyn->First; 110 - while (pt) 111 - { 112 - /* counting how many points are there */ 113 - points++; 114 - pt = pt->Next; 115 - } 116 - if (points < 2) 117 - return; 118 - ln = gaiaAddLinestringToGeomColl (geom, points); 119 - iv = 0; 120 - pt = dyn->First; 121 - while (pt) 122 - { 123 - gaiaSetPoint (ln->Coords, iv, pt->X, pt->Y); 124 - iv++; 125 - pt = pt->Next; 126 - } 127 -} 128 - 129 -static gaiaGeomCollPtr 130 -build_linestrings (struct aux_params *params, const readosm_way * way) 131 -{ 132 -/* building the Arcs of the Graph [may be, splitting a Way in more Arcs] */ 133 - int i_ref; 134 - int ret; 135 - gaiaGeomCollPtr geom; 136 - gaiaDynamicLinePtr dyn = gaiaAllocDynamicLine (); 137 - gaiaPointPtr pt; 138 - 139 - geom = gaiaAllocGeomColl (); 140 - geom->Srid = 4326; 141 - 142 - for (i_ref = 0; i_ref < way->node_ref_count; i_ref++) 143 - { 144 - /* fetching point coords */ 145 - sqlite3_int64 id = *(way->node_refs + i_ref); 146 - double x; 147 - double y; 148 - int ref_count; 149 - 150 - sqlite3_reset (params->rd_tmp_nodes_stmt); 151 - sqlite3_clear_bindings (params->rd_tmp_nodes_stmt); 152 - sqlite3_bind_int64 (params->rd_tmp_nodes_stmt, 1, id); 153 - 133 +init_tag (struct check_tag *tag, int max) 134 +{ 135 + tag->pos = 0; 136 + tag->max = max; 137 + memset (tag->buf, '\0', MAX_TAG + 1); 138 +} 139 + 140 +static void 141 +update_tag (struct check_tag *tag, const char c) 142 +{ 143 +/* updating the tag control struct */ 144 + int i; 145 + if (tag->pos == (tag->max - 1)) 146 + { 147 + for (i = 0; i < tag->max; i++) 148 + { 149 + /* rotating the buffer */ 150 + *(tag->buf + i) = *(tag->buf + i + 1); 151 + } 152 + *(tag->buf + tag->pos) = c; 153 + return; 154 + } 155 + *(tag->buf + tag->pos) = c; 156 + tag->pos++; 157 +} 158 + 159 +static int 160 +parse_node_id (const char *buf, sqlite3_int64 * id) 161 +{ 162 +/* parsing <node id="value" > */ 163 + char value[128]; 164 + char *out = value; 165 + const char *p = buf; 166 + struct check_tag tag; 167 + init_tag (&tag, 4); 168 + while (*p != '\0') 169 + { 170 + update_tag (&tag, *p); 171 + p++; 172 + if (strncmp (tag.buf, "id=\"", 4) == 0) 173 + { 174 + while (*p != '\"') 175 + { 176 + *out++ = *p++; 177 + } 178 + *out = '\0'; 179 + *id = atol_64 (value); 180 + return 1; 181 + } 182 + } 183 + return 0; 184 +} 185 + 186 +static int 187 +parse_node_lat (const char *buf, double *lat) 188 +{ 189 +/* parsing <node lat="value" >*/ 190 + char value[128]; 191 + char *out = value; 192 + const char *p = buf; 193 + struct check_tag tag; 194 + init_tag (&tag, 5); 195 + while (*p != '\0') 196 + { 197 + update_tag (&tag, *p); 198 + p++; 199 + if (strncmp (tag.buf, "lat=\"", 5) == 0) 200 + { 201 + while (*p != '\"') 202 + { 203 + *out++ = *p++; 204 + } 205 + *out = '\0'; 206 + *lat = atof (value); 207 + return 1; 208 + } 209 + } 210 + return 0; 211 +} 212 + 213 +static int 214 +parse_node_lon (const char *buf, double *lon) 215 +{ 216 +/* parsing <node lon="value" >*/ 217 + char value[128]; 218 + char *out = value; 219 + const char *p = buf; 220 + struct check_tag tag; 221 + init_tag (&tag, 5); 222 + while (*p != '\0') 223 + { 224 + update_tag (&tag, *p); 225 + p++; 226 + if (strncmp (tag.buf, "lon=\"", 5) == 0) 227 + { 228 + while (*p != '\"') 229 + { 230 + *out++ = *p++; 231 + } 232 + *out = '\0'; 233 + *lon = atof (value); 234 + return 1; 235 + } 236 + } 237 + return 0; 238 +} 239 + 240 +static int 241 +parse_node_tag (const char *buf, sqlite3_int64 * id, double *lat, double *lon) 242 +{ 243 +/* parsing a <node> tag */ 244 + if (!parse_node_id (buf, id)) 245 + return 0; 246 + if (!parse_node_lat (buf, lat)) 247 + return 0; 248 + if (!parse_node_lon (buf, lon)) 249 + return 0; 250 + return 1; 251 +} 252 + 253 +static int 254 +insert_node (sqlite3 * handle, sqlite3_stmt * stmt, sqlite3_int64 id, 255 + double lat, double lon) 256 +{ 257 +/* inserting a temporary node into the DB */ 258 + int ret; 259 + sqlite3_reset (stmt); 260 + sqlite3_clear_bindings (stmt); 261 + sqlite3_bind_int64 (stmt, 1, id); 262 + sqlite3_bind_int64 (stmt, 2, id); 263 + sqlite3_bind_double (stmt, 3, lat); 264 + sqlite3_bind_double (stmt, 4, lon); 265 + sqlite3_bind_int (stmt, 5, 0); 266 + ret = sqlite3_step (stmt); 267 + if (ret == SQLITE_DONE || ret == SQLITE_ROW) 268 + return 1; 269 + fprintf (stderr, "sqlite3_step() error: %s\n", sqlite3_errmsg (handle)); 270 + sqlite3_finalize (stmt); 271 + return 0; 272 +} 273 + 274 +static int 275 +parse_nodes (FILE * xml, sqlite3 * handle) 276 +{ 277 +/* parsing <node> tags from XML file */ 278 + sqlite3_stmt *stmt; 279 + int ret; 280 + char *sql_err = NULL; 281 + sqlite3_int64 id; 282 + double lat; 283 + double lon; 284 + int opened; 285 + int count = 0; 286 + int node = 0; 287 + int c; 288 + int last_c; 289 + char value[65536]; 290 + char *p; 291 + struct check_tag tag; 292 + init_tag (&tag, 6); 293 + 294 +/* the complete operation is handled as an unique SQL Transaction */ 295 + ret = sqlite3_exec (handle, "BEGIN", NULL, NULL, &sql_err); 296 + if (ret != SQLITE_OK) 297 + { 298 + fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 299 + sqlite3_free (sql_err); 300 + return -1; 301 + } 302 +/* preparing the SQL statement */ 303 + strcpy (value, 304 + "INSERT INTO osm_tmp_nodes (id, alias, lat, lon, refcount) "); 305 + strcat (value, "VALUES (?, ?, ?, ?, ?)"); 306 + ret = sqlite3_prepare_v2 (handle, value, strlen (value), &stmt, NULL); 307 + if (ret != SQLITE_OK) 308 + { 309 + fprintf (stderr, "SQL error: %s\n%s\n", value, 310 + sqlite3_errmsg (handle)); 311 + return -1; 312 + } 313 + 314 + while ((c = getc (xml)) != EOF) 315 + { 316 + if (node) 317 + { 318 + /* we are inside a <node> tag */ 319 + *p++ = c; 320 + if (c == '<') 321 + opened++; 322 + if (!opened && c == '>' && last_c == '/') 323 + { 324 + /* closing a <node /> tag */ 325 + *p = '\0'; 326 + if (!parse_node_tag (value, &id, &lat, &lon)) 327 + { 328 + fprintf (stderr, "ERROR: invalid <node>\n"); 329 + return -1; 330 + } 331 + else 332 + { 333 + if (!insert_node (handle, stmt, id, lat, lon)) 334 + return -1; 335 + count++; 336 + } 337 + node = 0; 338 + continue; 339 + } 340 + last_c = c; 341 + } 342 + update_tag (&tag, c); 343 + if (strncmp (tag.buf, "<node ", 6) == 0) 344 + { 345 + /* opening a <node> tag */ 346 + node = 1; 347 + last_c = '\0'; 348 + opened = 0; 349 + strcpy (value, "<node "); 350 + p = value + 6; 351 + continue; 352 + } 353 + if (strncmp (tag.buf, "</node", 6) == 0) 354 + { 355 + /* closing a <node> tag */ 356 + *p = '\0'; 357 + if (!parse_node_tag (value, &id, &lat, &lon)) 358 + { 359 + fprintf (stderr, "ERROR: invalid <node>\n"); 360 + return -1; 361 + } 362 + else 363 + { 364 + if (!insert_node (handle, stmt, id, lat, lon)) 365 + return -1; 366 + count++; 367 + } 368 + node = 0; 369 + continue; 370 + } 371 + } 372 +/* finalizing the INSERT INTO prepared statement */ 373 + sqlite3_finalize (stmt); 374 + 375 +/* committing the still pending SQL Transaction */ 376 + ret = sqlite3_exec (handle, "COMMIT", NULL, NULL, &sql_err); 377 + if (ret != SQLITE_OK) 378 + { 379 + fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 380 + sqlite3_free (sql_err); 381 + return -1; 382 + } 383 + return count; 384 +} 385 + 386 +static int 387 +disambiguate_nodes (sqlite3 * handle) 388 +{ 389 +/* disambiguating duplicate NODEs */ 390 + int ret; 391 + sqlite3_stmt *stmt; 392 + sqlite3_int64 id; 393 + int refcount; 394 + double lon; 395 + double lat; 396 + char sql[8192]; 397 + int count = 0; 398 + struct dup_node *first = NULL; 399 + struct dup_node *last = NULL; 400 + struct dup_node *p; 401 + struct dup_node *pn; 402 + struct dup_node_id *pid; 403 + struct dup_node_id *pidn; 404 + char *sql_err = NULL; 405 +/* creating an index */ 406 + strcpy (sql, "CREATE INDEX latlon ON osm_tmp_nodes (lat, lon)"); 407 + ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err); 408 + if (ret != SQLITE_OK) 409 + { 410 + fprintf (stderr, "CREATE INDEX latlon: %s\n", sql_err); 411 + sqlite3_free (sql_err); 412 + return -1; 413 + } 414 +/* identifying the duplicate nodes by coords */ 415 + strcpy (sql, "SELECT lat, lon, Sum(refcount) FROM osm_tmp_nodes "); 416 + strcat (sql, "WHERE refcount > 0 GROUP BY lat, lon "); 417 + strcat (sql, "HAVING count(*) > 1"); 418 + ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL); 419 + if (ret != SQLITE_OK) 420 + { 421 + fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle)); 422 + return -1; 423 + } 424 + while (1) 425 + { 154 426 /* scrolling the result set */ 155 - ret = sqlite3_step (params->rd_tmp_nodes_stmt); 427 + ret = sqlite3_step (stmt); 156 428 if (ret == SQLITE_DONE) 157 429 { 158 - /* empty resultset - no coords !!! */ 159 -#if defined(_WIN32) || defined(__MINGW32__) 160 - /* CAVEAT - M$ runtime doesn't supports %lld for 64 bits */ 161 - fprintf (stderr, "UNRESOLVED-NODE %I64d\n", id); 162 -#else 163 - fprintf (stderr, "UNRESOLVED-NODE %lld\n", id); 164 -#endif 165 - gaiaFreeDynamicLine (dyn); 166 - gaiaFreeGeomColl (geom); 167 - return NULL; 430 + /* there are no more rows to fetch - we can stop looping */ 431 + break; 168 432 } 169 - else if (ret == SQLITE_ROW) 433 + if (ret == SQLITE_ROW) 170 434 { 171 435 /* ok, we've just fetched a valid row */ 172 - x = sqlite3_column_double (params->rd_tmp_nodes_stmt, 0); 173 - y = sqlite3_column_double (params->rd_tmp_nodes_stmt, 1); 174 - ref_count = sqlite3_column_int (params->rd_tmp_nodes_stmt, 2); 175 - 176 - pt = dyn->Last; 177 - if (pt) 178 - { 179 - if (pt->X == x && pt->Y == y) 180 - { 181 - /* skipping any repeated point */ 182 - continue; 183 - } 184 - } 185 - 186 - /* appending the point to the current line anyway */ 187 - gaiaAppendPointToDynamicLine (dyn, x, y); 188 - if (params->noding_strategy != NODE_STRAT_NONE) 189 - { 190 - /* attempting to renode the Graph */ 191 - int limit = 1; 192 - if (params->noding_strategy == NODE_STRAT_ENDS) 193 - { 194 - /* renoding each Way terminal point */ 195 - limit = 0; 196 - } 197 - if ((ref_count > limit) 198 - && (i_ref > 0 && i_ref < (way->node_ref_count - 1))) 199 - { 200 - /* found an internal Node: saving the current line */ 201 - save_current_line (geom, dyn); 202 - /* starting a further line */ 203 - gaiaFreeDynamicLine (dyn); 204 - dyn = gaiaAllocDynamicLine (); 205 - /* inserting the current point in the new line */ 206 - gaiaAppendPointToDynamicLine (dyn, x, y); 207 - } 208 - } 436 + lat = sqlite3_column_double (stmt, 0); 437 + lon = sqlite3_column_double (stmt, 1); 438 + refcount = sqlite3_column_int (stmt, 2); 439 + p = malloc (sizeof (struct dup_node)); 440 + p->lat = lat; 441 + p->lon = lon; 442 + p->refcount = refcount; 443 + p->first = NULL; 444 + p->last = NULL; 445 + p->next = NULL; 446 + if (!first) 447 + first = p; 448 + if (last) 449 + last->next = p; 450 + last = p; 209 451 } 210 452 else 211 453 { 212 454 /* some unexpected error occurred */ 213 455 fprintf (stderr, "sqlite3_step() error: %s\n", 214 - sqlite3_errmsg (params->db_handle)); 215 - sqlite3_finalize (params->rd_tmp_nodes_stmt); 216 - gaiaFreeGeomColl (geom); 217 - gaiaFreeDynamicLine (dyn); 218 - return NULL; 219 - } 220 - } 221 -/* saving the last line */ 222 - save_current_line (geom, dyn); 223 - gaiaFreeDynamicLine (dyn); 224 - 225 - if (geom->FirstLinestring == NULL) 226 - { 227 - /* invalid geometry: no lines */ 228 - gaiaFreeGeomColl (geom); 229 - return NULL; 230 - } 231 - return geom; 456 + sqlite3_errmsg (handle)); 457 + sqlite3_finalize (stmt); 458 + return -1; 459 + } 460 + } 461 + sqlite3_finalize (stmt); 462 +/* retrieving the dup-nodes IDs */ 463 + p = first; 464 + while (p) 465 + { 466 + strcpy (sql, "SELECT id FROM osm_tmp_nodes "); 467 + strcat (sql, "WHERE lat = ? AND lon = ?"); 468 + ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL); 469 + if (ret != SQLITE_OK) 470 + { 471 + fprintf (stderr, "SQL error: %s\n%s\n", sql, 472 + sqlite3_errmsg (handle)); 473 + return -1; 474 + } 475 + sqlite3_reset (stmt); 476 + sqlite3_clear_bindings (stmt); 477 + sqlite3_bind_double (stmt, 1, p->lat); 478 + sqlite3_bind_double (stmt, 2, p->lon); 479 + while (1) 480 + { 481 + /* scrolling the result set */ 482 + ret = sqlite3_step (stmt); 483 + if (ret == SQLITE_DONE) 484 + { 485 + /* there are no more rows to fetch - we can stop looping */ 486 + break; 487 + } 488 + if (ret == SQLITE_ROW) 489 + { 490 + /* ok, we've just fetched a valid row */ 491 + id = sqlite3_column_int64 (stmt, 0); 492 + pid = malloc (sizeof (struct dup_node_id)); 493 + pid->id = id; 494 + pid->next = NULL; 495 + if (p->first == NULL) 496 + p->first = pid; 497 + if (p->last != NULL) 498 + p->last->next = pid; 499 + p->last = pid; 500 + } 501 + else 502 + { 503 + /* some unexpected error occurred */ 504 + fprintf (stderr, "sqlite3_step() error: %s\n", 505 + sqlite3_errmsg (handle)); 506 + sqlite3_finalize (stmt); 507 + return -1; 508 + } 509 + } 510 + sqlite3_finalize (stmt); 511 + p = p->next; 512 + } 513 + 514 +/* the complete operation is handled as an unique SQL Transaction */ 515 + ret = sqlite3_exec (handle, "BEGIN", NULL, NULL, &sql_err); 516 + if (ret != SQLITE_OK) 517 + { 518 + fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 519 + sqlite3_free (sql_err); 520 + return -1; 521 + } 522 +/* preparing the SQL statement */ 523 + strcpy (sql, "UPDATE osm_tmp_nodes SET alias = ?, refcount = ? "); 524 + strcat (sql, "WHERE id = ?"); 525 + ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL); 526 + if (ret != SQLITE_OK) 527 + { 528 + fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle)); 529 + return -1; 530 + } 531 + 532 + p = first; 533 + while (p) 534 + { 535 + pid = p->first; 536 + while (pid) 537 + { 538 + if (pid == p->first) 539 + { 540 + /* fixing the master node */ 541 + sqlite3_reset (stmt); 542 + sqlite3_clear_bindings (stmt); 543 + sqlite3_bind_int64 (stmt, 1, pid->id); 544 + sqlite3_bind_int (stmt, 2, p->refcount); 545 + sqlite3_bind_int64 (stmt, 3, pid->id); 546 + ret = sqlite3_step (stmt); 547 + if (ret == SQLITE_DONE || ret == SQLITE_ROW) 548 + count++; 549 + else 550 + { 551 + fprintf (stderr, "sqlite3_step() error: %s\n", 552 + sqlite3_errmsg (handle)); 553 + sqlite3_finalize (stmt); 554 + return -1; 555 + } 556 + } 557 + else 558 + { 559 + /* disambiguating the node */ 560 + sqlite3_reset (stmt); 561 + sqlite3_clear_bindings (stmt); 562 + sqlite3_bind_int64 (stmt, 1, p->first->id); 563 + sqlite3_bind_int (stmt, 2, p->refcount); 564 + sqlite3_bind_int64 (stmt, 3, pid->id); 565 + ret = sqlite3_step (stmt); 566 + if (ret == SQLITE_DONE || ret == SQLITE_ROW) 567 + count++; 568 + else 569 + { 570 + fprintf (stderr, "sqlite3_step() error: %s\n", 571 + sqlite3_errmsg (handle)); 572 + sqlite3_finalize (stmt); 573 + return -1; 574 + } 575 + } 576 + pid = pid->next; 577 + } 578 + p = p->next; 579 + } 580 +/* finalizing the INSERT INTO prepared statement */ 581 + sqlite3_finalize (stmt); 582 + 583 +/* committing the still pending SQL Transaction */ 584 + ret = sqlite3_exec (handle, "COMMIT", NULL, NULL, &sql_err); 585 + if (ret != SQLITE_OK) 586 + { 587 + fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 588 + sqlite3_free (sql_err); 589 + return -1; 590 + } 591 + 592 +/* freeing the dup-nodes list */ 593 + p = first; 594 + while (p) 595 + { 596 + pn = p->next; 597 + pid = p->first; 598 + while (pid) 599 + { 600 + pidn = pid->next; 601 + free (pid); 602 + pid = pidn; 603 + } 604 + free (p); 605 + p = pn; 606 + } 607 + return count; 608 +} 609 + 610 +static int 611 +parse_way_id (const char *buf, sqlite3_int64 * id) 612 +{ 613 +/* parsing <way id="value" > */ 614 + char value[128]; 615 + char *out = value; 616 + const char *p = buf; 617 + struct check_tag tag; 618 + init_tag (&tag, 4); 619 + while (*p != '\0') 620 + { 621 + update_tag (&tag, *p); 622 + p++; 623 + if (strncmp (tag.buf, "id=\"", 4) == 0) 624 + { 625 + while (*p != '\"') 626 + { 627 + *out++ = *p++; 628 + } 629 + *out = '\0'; 630 + *id = atol_64 (value); 631 + return 1; 632 + } 633 + } 634 + return 0; 635 +} 636 + 637 +static int 638 +parse_nd_id (const char *buf, sqlite3_int64 * id) 639 +{ 640 +/* parsing <nd ref="value" > */ 641 + char value[128]; 642 + char *out = value; 643 + const char *p = buf; 644 + struct check_tag tag; 645 + init_tag (&tag, 5); 646 + while (*p != '\0') 647 + { 648 + update_tag (&tag, *p); 649 + p++; 650 + if (strncmp (tag.buf, "ref=\"", 5) == 0) 651 + { 652 + while (*p != '\"') 653 + { 654 + *out++ = *p++; 655 + } 656 + *out = '\0'; 657 + *id = atol_64 (value); 658 + return 1; 659 + } 660 + } 661 + return 0; 662 +} 663 + 664 +static int 665 +parse_tag_k (const char *buf, char *k) 666 +{ 667 +/* parsing <tag k="value" > */ 668 + char value[128]; 669 + char *out = value; 670 + const char *p = buf; 671 + struct check_tag tag; 672 + init_tag (&tag, 3); 673 + while (*p != '\0') 674 + { 675 + update_tag (&tag, *p); 676 + p++; 677 + if (strncmp (tag.buf, "k=\"", 3) == 0) 678 + { 679 + while (*p != '\"') 680 + { 681 + *out++ = *p++; 682 + } 683 + *out = '\0'; 684 + strcpy (k, value); 685 + return 1; 686 + } 687 + } 688 + return 0; 689 +} 690 + 691 +static void 692 +from_xml_string (const char *xml, char *clean) 693 +{ 694 +/* cleans XML markers */ 695 + char marker[16]; 696 + char *pm; 697 + int is_marker = 0; 698 + const char *in = xml; 699 + char *out = clean; 700 + while (*in != '\0') 701 + { 702 + if (is_marker) 703 + { 704 + if (*in == ';') 705 + { 706 + /* closing an XML marker */ 707 + in++; 708 + is_marker = 0; 709 + *pm = '\0'; 710 + if (strcmp (marker, "&") == 0) 711 + *out++ = '&'; 712 + if (strcmp (marker, "<") == 0) 713 + *out++ = '<'; 714 + if (strcmp (marker, ">") == 0) 715 + *out++ = '>'; 716 + if (strcmp (marker, """) == 0) 717 + *out++ = '"'; 718 + if (strcmp (marker, "&apos") == 0) 719 + *out++ = '\''; 720 + } 721 + else 722 + *pm++ = *in++; 723 + continue; 724 + } 725 + if (*in == '&') 726 + { 727 + /* found an XML marker */ 728 + in++; 729 + is_marker = 1; 730 + pm = marker; 731 + *pm++ = '&'; 732 + continue; 733 + } 734 + *out++ = *in++; 735 + } 736 + *out = '\0'; 737 +} 738 + 739 +static int 740 +parse_tag_v (const char *buf, char *v) 741 +{ 742 +/* parsing <tag v="value" > */ 743 + char value[8192]; 744 + char *out = value; 745 + const char *p = buf; 746 + struct check_tag tag; 747 + init_tag (&tag, 3); 748 + while (*p != '\0') 749 + { 750 + update_tag (&tag, *p); 751 + p++; 752 + if (strncmp (tag.buf, "v=\"", 3) == 0) 753 + { 754 + while (*p != '\"') 755 + { 756 + *out++ = *p++; 757 + } 758 + *out = '\0'; 759 + from_xml_string (value, v); 760 + return 1; 761 + } 762 + } 763 + return 0; 764 +} 765 + 766 +static int 767 +parse_tag_kv (const char *buf, char *k, char *v) 768 +{ 769 +/* parsing a <tag> tag */ 770 + if (!parse_tag_k (buf, k)) 771 + return 0; 772 + if (!parse_tag_v (buf, v)) 773 + return 0; 774 + return 1; 775 +} 776 + 777 +static int 778 +parse_way_tag (const char *buf, struct way *xway) 779 +{ 780 +/* parsing a <way> tag */ 781 + int nd = 0; 782 + int tg = 0; 783 + const char *in; 784 + char value[65536]; 785 + char k[8192]; 786 + char v[8192]; 787 + char *p; 788 + char c; 789 + int opened; 790 + int last_c; 791 + sqlite3_int64 id; 792 + struct check_tag tag; 793 + if (!parse_way_id (buf, &(xway->id))) 794 + return 0; 795 +/* parsing the <nd> list */ 796 + in = buf; 797 + init_tag (&tag, 4); 798 + while (*in != '\0') 799 + { 800 + c = *in++; 801 + if (nd) 802 + { 803 + /* we are inside a <nd> tag */ 804 + *p++ = c; 805 + if (c == '<') 806 + opened++; 807 + if (!opened && c == '>' && last_c == '/') 808 + { 809 + /* closing a <nd /> tag */ 810 + *p = '\0'; 811 + if (!parse_nd_id (value, &id)) 812 + { 813 + fprintf (stderr, "ERROR: invalid <nd>\n"); 814 + return 0; 815 + } 816 + else 817 + { 818 + struct node_ref *node = 819 + malloc (sizeof (struct node_ref)); 820 + node->id = id; 821 + node->ignore = 1; 822 + node->next = NULL; 823 + if (xway->first == NULL) 824 + xway->first = node; 825 + if (xway->last != NULL) 826 + xway->last->next = node; 827 + xway->last = node; 828 + } 829 + nd = 0; 830 + continue; 831 + } 832 + last_c = c; 833 + } 834 + update_tag (&tag, c); 835 + if (strncmp (tag.buf, "<nd ", 4) == 0) 836 + { 837 + /* opening a <nd> tag */ 838 + nd = 1; 839 + last_c = '\0'; 840 + opened = 0; 841 + strcpy (value, "<nd "); 842 + p = value + 4; 843 + continue; 844 + } 845 + } 846 +/* parsing the <tag> list */ 847 + in = buf; 848 + init_tag (&tag, 5); 849 + while (*in != '\0') 850 + { 851 + c = *in++; 852 + if (tg) 853 + { 854 + /* we are inside a <tag> tag */ 855 + *p++ = c; 856 + if (c == '<') 857 + opened++; 858 + if (!opened && c == '>' && last_c == '/') 859 + { 860 + /* closing a <tag /> tag */ 861 + *p = '\0'; 862 + if (!parse_tag_kv (value, k, v)) 863 + { 864 + fprintf (stderr, "ERROR: invalid <tag>\n"); 865 + return 0; 866 + } 867 + else 868 + { 869 + struct kv *key_value = malloc (sizeof (struct kv)); 870 + key_value->k = malloc (strlen (k) + 1); 871 + strcpy (key_value->k, k); 872 + key_value->v = malloc (strlen (v) + 1); 873 + strcpy (key_value->v, v); 874 + key_value->next = NULL; 875 + if (xway->first_kv == NULL) 876 + xway->first_kv = key_value; 877 + if (xway->last_kv != NULL) 878 + xway->last_kv->next = key_value; 879 + xway->last_kv = key_value; 880 + } 881 + tg = 0; 882 + continue; 883 + } 884 + last_c = c; 885 + } 886 + update_tag (&tag, c); 887 + if (strncmp (tag.buf, "<tag ", 5) == 0) 888 + { 889 + /* opening a <tag> tag */ 890 + tg = 1; 891 + last_c = '\0'; 892 + opened = 0; 893 + strcpy (value, "<tag "); 894 + p = value + 5; 895 + continue; 896 + } 897 + } 898 + return 1; 899 +} 900 + 901 +static void 902 +clean_way (struct way *xway) 903 +{ 904 +/* memory clean up */ 905 + struct node_ref *p; 906 + struct node_ref *pn; 907 + struct kv *pkv; 908 + struct kv *pkvn; 909 + struct arc *pa; 910 + struct arc *pan; 911 + p = xway->first; 912 + while (p) 913 + { 914 + pn = p->next; 915 + free (p); 916 + p = pn; 917 + } 918 + xway->first = NULL; 919 + xway->last = NULL; 920 + pkv = xway->first_kv; 921 + while (pkv) 922 + { 923 + pkvn = pkv->next; 924 + free (pkv->k); 925 + free (pkv->v); 926 + free (pkv); 927 + pkv = pkvn; 928 + } 929 + xway->first_kv = NULL; 930 + xway->last_kv = NULL; 931 + pa = xway->first_arc; 932 + while (pa) 933 + { 934 + pan = pa->next; 935 + if (pa->dyn) 936 + gaiaFreeDynamicLine (pa->dyn); 937 + if (pa->geom) 938 + gaiaFreeGeomColl (pa->geom); 939 + free (pa); 940 + pa = pan; 941 + } 942 + xway->first_arc = NULL; 943 + xway->last_arc = NULL; 944 + if (xway->class) 945 + free (xway->class); 946 + xway->class = NULL; 947 + if (xway->name) 948 + free (xway->name); 949 + xway->name = NULL; 950 +} 951 + 952 +static void 953 +set_way_name (struct way *xway) 954 +{ 955 +/* trying to fetch the road name */ 956 + struct kv *pkv; 957 + pkv = xway->first_kv; 958 + while (pkv) 959 + { 960 + if (strcmp (pkv->k, "name") == 0) 961 + { 962 + if (xway->name) 963 + free (xway->name); 964 + xway->name = malloc (strlen (pkv->v) + 1); 965 + strcpy (xway->name, pkv->v); 966 + return; 967 + } 968 + if (strcmp (pkv->k, "ref") == 0) 969 + { 970 + if (xway->name == NULL) 971 + { 972 + xway->name = malloc (strlen (pkv->v) + 1); 973 + strcpy (xway->name, pkv->v); 974 + return; 975 + } 976 + } 977 + pkv = pkv->next; 978 + } 232 979 } 233 980 234 981 static int 235 -arcs_insert (struct aux_params *params, sqlite3_int64 id, const char *class, 236 - const char *name, int oneway, unsigned char *blob, int blob_size) 237 -{ 238 -/* Inserts an Arc into the Graph */ 239 - int ret; 240 - if (params->ins_arcs_stmt == NULL) 241 - return 1; 242 - sqlite3_reset (params->ins_arcs_stmt); 243 - sqlite3_clear_bindings (params->ins_arcs_stmt); 244 - sqlite3_bind_int64 (params->ins_arcs_stmt, 1, id); 245 - sqlite3_bind_text (params->ins_arcs_stmt, 2, class, strlen (class), 246 - SQLITE_STATIC); 247 - sqlite3_bind_text (params->ins_arcs_stmt, 3, name, strlen (name), 248 - SQLITE_STATIC); 249 - if (oneway > 0) 250 - { 251 - sqlite3_bind_int (params->ins_arcs_stmt, 4, 1); 252 - sqlite3_bind_int (params->ins_arcs_stmt, 5, 0); 253 - } 254 - else if (oneway < 0) 255 - { 256 - sqlite3_bind_int (params->ins_arcs_stmt, 4, 0); 257 - sqlite3_bind_int (params->ins_arcs_stmt, 5, 1); 258 - } 259 - else 260 - { 261 - sqlite3_bind_int (params->ins_arcs_stmt, 4, 1); 262 - sqlite3_bind_int (params->ins_arcs_stmt, 5, 1); 263 - } 264 - sqlite3_bind_blob (params->ins_arcs_stmt, 6, blob, blob_size, free); 265 - ret = sqlite3_step (params->ins_arcs_stmt); 266 - 267 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 268 - return 1; 269 - fprintf (stderr, "sqlite3_step() error: INS_ARCS\n"); 270 - sqlite3_finalize (params->ins_arcs_stmt); 271 - params->ins_arcs_stmt = NULL; 982 +is_valid_way (const char *key, const char *class, int railways) 983 +{ 984 +/* checks if this one is an valid road to be included into the network */ 985 + if (strcmp (key, "highway") == 0 && !railways) 986 + { 987 + if (strcmp (class, "pedestrian") == 0) 988 + return 0; 989 + if (strcmp (class, "track") == 0) 990 + return 0; 991 + if (strcmp (class, "services") == 0) 992 + return 0; 993 + if (strcmp (class, "bus_guideway") == 0) 994 + return 0; 995 + if (strcmp (class, "path") == 0) 996 + return 0; 997 + if (strcmp (class, "cycleway") == 0) 998 + return 0; 999 + if (strcmp (class, "footway") == 0) 1000 + return 0; 1001 + if (strcmp (class, "bridleway") == 0) 1002 + return 0; 1003 + if (strcmp (class, "byway") == 0) 1004 + return 0; 1005 + if (strcmp (class, "steps") == 0) 1006 + return 0; 1007 + return 1; 1008 + } 1009 + if (strcmp (key, "railway") == 0 && railways) 1010 + { 1011 + return 1; 1012 + } 272 1013 return 0; 273 1014 } 1015 + 1016 +static void 1017 +set_oneway (struct way *xway) 1018 +{ 1019 +/* setting up the oneway markers */ 1020 + struct kv *pkv; 1021 + xway->oneway = 0; 1022 + xway->reverse = 0; 1023 + pkv = xway->first_kv; 1024 + while (pkv) 1025 + { 1026 + if (strcmp (pkv->k, "oneway") == 0) 1027 + { 1028 + if (strcmp (pkv->v, "yes") == 0 || strcmp (pkv->v, "yes") == 0 1029 + || strcmp (pkv->v, "1") == 0) 1030 + { 1031 + xway->oneway = 1; 1032 + xway->reverse = 0; 1033 + } 1034 + if (strcmp (pkv->v, "-1") == 0) 1035 + { 1036 + xway->oneway = 1; 1037 + xway->reverse = 1; 1038 + } 1039 + } 1040 + pkv = pkv->next; 1041 + } 1042 +} 274 1043 275 1044 static int 276 -find_include_class (struct aux_params *params, const char *class, 277 - const char *sub_class) 1045 +check_way (struct way *xway, int railways) 278 1046 { 279 -/* testing if this Way belongs to some class to be Included */ 280 - struct aux_class *pc = params->first_include; 281 - while (pc) 1047 +/* checks if <way> is interesting to build the road network */ 1048 + struct kv *pkv; 1049 + pkv = xway->first_kv; 1050 + while (pkv) 282 1051 { 283 - if (strcmp (pc->class_name, class) == 0) 1052 + if (is_valid_way (pkv->k, pkv->v, railways)) 284 1053 { 285 - if (pc->sub_class == NULL) 286 - return 1; 287 - if (strcmp (pc->sub_class, sub_class) == 0) 288 - return 1; 1054 + xway->class = malloc (strlen (pkv->v) + 1); 1055 + strcpy (xway->class, pkv->v); 1056 + set_way_name (xway); 1057 + set_oneway (xway); 1058 + return 1; 289 1059 } 290 - pc = pc->next; 1060 + pkv = pkv->next; 291 1061 } 292 1062 return 0; 293 1063 } 294 1064 295 -static int 296 -find_ignore_class (struct aux_params *params, const char *class, 297 - const char *sub_class) 1065 +static sqlite3_int64 1066 +find_node (struct way *xway, double lon, double lat) 298 1067 { 299 -/* testing if this Way belongs to some class to be Ignored */ 300 - struct aux_class *pc = params->first_ignore; 301 - while (pc) 1068 +/* finding a node by coords */ 1069 + struct node_ref *p = xway->first; 1070 + while (p) 302 1071 { 303 - if (strcmp (pc->class_name, class) == 0) 1072 + if (p->ignore == 0) 304 1073 { 305 - if (strcmp (pc->sub_class, sub_class) == 0) 306 - return 1; 1074 + if (p->lon == lon && p->lat == lat) 1075 + return p->alias; 307 1076 } 308 - pc = pc->next; 1077 + p = p->next; 309 1078 } 310 1079 return 0; 311 1080 } 312 1081 313 -static int 314 -consume_way_1 (const void *user_data, const readosm_way * way) 315 -{ 316 -/* processing an OSM Way - Pass#1 (ReadOSM callback function) */ 317 - struct aux_params *params = (struct aux_params *) user_data; 318 - const readosm_tag *p_tag; 319 - int i_tag; 320 - int i_ref; 321 - int ret; 322 - sqlite3_int64 id; 323 - int include = 0; 324 - int ignore = 0; 325 - 326 - if (params->noding_strategy == NODE_STRAT_NONE) 327 - { 328 - /* renoding the graph isn't required, we can skip all this */ 329 - return READOSM_OK; 330 - } 331 - 332 - for (i_tag = 0; i_tag < way->tag_count; i_tag++) 333 - { 334 - p_tag = way->tags + i_tag; 335 - if (find_include_class (params, p_tag->key, p_tag->value)) 336 - include = 1; 337 - if (find_ignore_class (params, p_tag->key, p_tag->value)) 338 - ignore = 1; 339 - } 340 - if (!include || ignore) 341 - return READOSM_OK; 342 - 343 - for (i_ref = 0; i_ref < way->node_ref_count; i_ref++) 344 - { 345 - if (params->noding_strategy == NODE_STRAT_ENDS) 346 - { 347 - /* checking only the Way extreme points */ 348 - if (i_ref == 0 || i_ref == (way->node_ref_count - 1)) 349 - ; 350 - else 351 - continue; 352 - } 353 - id = *(way->node_refs + i_ref); 354 - sqlite3_reset (params->upd_tmp_nodes_stmt); 355 - sqlite3_clear_bindings (params->upd_tmp_nodes_stmt); 356 - sqlite3_bind_int64 (params->upd_tmp_nodes_stmt, 1, id); 357 - ret = sqlite3_step (params->upd_tmp_nodes_stmt); 358 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 359 - ; 360 - else 361 - { 362 - fprintf (stderr, "sqlite3_step() error: %s\n", 363 - sqlite3_errmsg (params->db_handle)); 364 - sqlite3_finalize (params->upd_tmp_nodes_stmt); 365 - return READOSM_ABORT; 366 - } 367 - } 368 - 369 - return READOSM_OK; 1082 +static double 1083 +compute_time (const char *class, double length) 1084 +{ 1085 +/* computing traval time */ 1086 + double speed = 30.0; /* speed, in Km/h */ 1087 + double msec; 1088 + if (strcmp (class, "motorway") == 0 || strcmp (class, "trunk") == 0) 1089 + speed = 110; 1090 + if (strcmp (class, "primary") == 0) 1091 + speed = 90; 1092 + if (strcmp (class, "secondary") == 0) 1093 + speed = 70; 1094 + if (strcmp (class, "tertiary") == 0) 1095 + speed = 50; 1096 + msec = speed * 1000.0 / 3600.0; /* transforming speed in m/sec */ 1097 + return length / msec; 370 1098 } 371 1099 372 1100 static int 373 -consume_way_2 (const void *user_data, const readosm_way * way) 374 -{ 375 -/* processing an OSM Way - Pass#2 (ReadOSM callback function) */ 376 - struct aux_params *params = (struct aux_params *) user_data; 377 - const readosm_tag *p_tag; 378 - int i_tag; 379 - unsigned char *blob; 380 - int blob_size; 381 - const char *class = NULL; 382 - const char *name = "*** Unknown ****"; 383 - int oneway = 0; 384 - int ret; 385 - int include = 0; 386 - int ignore = 0; 387 - gaiaGeomCollPtr geom; 388 - 389 - for (i_tag = 0; i_tag < way->tag_count; i_tag++) 390 - { 391 - p_tag = way->tags + i_tag; 392 - if (find_include_class (params, p_tag->key, p_tag->value)) 393 - { 394 - include = 1; 395 - class = p_tag->value; 396 - } 397 - if (find_ignore_class (params, p_tag->key, p_tag->value)) 398 - ignore = 1; 399 - } 400 - if (!include || ignore) 401 - return READOSM_OK; 402 - 403 - for (i_tag = 0; i_tag < way->tag_count; i_tag++) 404 - { 405 - /* retrieving the road name */ 406 - p_tag = way->tags + i_tag; 407 - if (strcmp (p_tag->key, "name") == 0) 408 - { 409 - name = p_tag->value; 410 - break; 411 - } 412 - } 413 - 414 - if (params->oneway_strategy != ONEWAY_STRAT_NONE) 415 - { 416 - /* checking for Oneeays */ 417 - for (i_tag = 0; i_tag < way->tag_count; i_tag++) 418 - { 419 - /* checking for one-ways */ 420 - p_tag = way->tags + i_tag; 421 - if (strcmp (p_tag->key, "oneway") == 0) 422 - { 423 - if (strcmp (p_tag->value, "yes") == 0 424 - || strcmp (p_tag->value, "true") == 0 425 - || strcmp (p_tag->value, "1") == 0) 426 - oneway = 1; 427 - if (strcmp (p_tag->value, "-1") == 0 428 - || strcmp (p_tag->value, "reverse") == 0) 429 - oneway = -1; 430 - } 431 - if (params->oneway_strategy != ONEWAY_STRAT_NO_BOTH 432 - && params->oneway_strategy != ONEWAY_STRAT_NO_ROUND) 433 - { 434 - /* testing for junction:roundabout */ 435 - if (strcmp (p_tag->key, "junction") == 0) 436 - { 437 - if (strcmp (p_tag->value, "roundabout") == 0) 438 - oneway = 1; 439 - } 440 - } 441 - if (params->oneway_strategy != ONEWAY_STRAT_NO_BOTH 442 - && params->oneway_strategy != ONEWAY_STRAT_NO_MOTOR) 443 - { 444 - /* testing for highway_motorway or highway_motorway_link */ 445 - if (strcmp (p_tag->key, "highway") == 0) 446 - { 447 - if (strcmp (p_tag->value, "motorway") == 0 448 - || strcmp (p_tag->value, "motorway_link") == 0) 449 - oneway = 1; 450 - } 451 - } 452 - } 453 - } 454 - 455 - geom = build_linestrings (params, way); 456 - if (geom) 457 - { 458 - gaiaLinestringPtr ln = geom->FirstLinestring; 459 - while (ln) 460 - { 461 - /* inserting any splitted Arc */ 462 - gaiaGeomCollPtr g; 463 - gaiaLinestringPtr ln2; 464 - int iv; 465 - if (gaiaIsClosed (ln)) 466 - { 467 - ln = ln->Next; 1101 +build_geometry (sqlite3 * handle, struct way *xway) 1102 +{ 1103 +/* building geometry representing an ARC */ 1104 + int ret; 1105 + sqlite3_stmt *stmt; 1106 + sqlite3_int64 id; 1107 + sqlite3_int64 alias; 1108 + int refcount; 1109 + double lon; 1110 + double lat; 1111 + char sql[8192]; 1112 + int ind; 1113 + int points = 0; 1114 + int tbd; 1115 + int count; 1116 + int base = 0; 1117 + int block = 128; 1118 + int how_many; 1119 + struct node_ref *p; 1120 + struct node_ref *prev; 1121 + struct arc *pa; 1122 + gaiaLinestringPtr line; 1123 + double a; 1124 + double b; 1125 + double rf; 1126 + p = xway->first; 1127 + while (p) 1128 + { 1129 + points++; 1130 + p = p->next; 1131 + } 1132 + if (points < 2) 1133 + { 1134 + /* discarding stupid degenerated lines - oh yes, there are lots of them !!! */ 1135 + return -1; 1136 + } 1137 + tbd = points; 1138 + while (tbd > 0) 1139 + { 1140 + /* 1141 + / fetching node coords 1142 + / requesting max 128 points at each time 1143 + */ 1144 + if (tbd < block) 1145 + how_many = tbd; 1146 + else 1147 + how_many = block; 1148 + strcpy (sql, 1149 + "SELECT id, alias, lat, lon, refcount FROM osm_tmp_nodes "); 1150 + strcat (sql, "WHERE id IN ("); 1151 + for (ind = 0; ind < how_many; ind++) 1152 + { 1153 + if (ind == 0) 1154 + strcat (sql, "?"); 1155 + else 1156 + strcat (sql, ",?"); 1157 + } 1158 + strcat (sql, ")"); 1159 + ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL); 1160 + if (ret != SQLITE_OK) 1161 + { 1162 + fprintf (stderr, "SQL error: %s\n%s\n", sql, 1163 + sqlite3_errmsg (handle)); 1164 + return 0; 1165 + } 1166 + sqlite3_reset (stmt); 1167 + sqlite3_clear_bindings (stmt); 1168 + ind = 1; 1169 + count = 0; 1170 + p = xway->first; 1171 + while (p) 1172 + { 1173 + if (count < base) 1174 + { 1175 + count++; 1176 + p = p->next; 468 1177 continue; 469 1178 } 470 - /* building a new Geometry - simple line */ 471 - g = gaiaAllocGeomColl (); 472 - g->Srid = 4326; 473 - ln2 = gaiaAddLinestringToGeomColl (g, ln->Points); 474 - for (iv = 0; iv < ln->Points; iv++) 1179 + if (count >= (base + how_many)) 1180 + break; 1181 + sqlite3_bind_int64 (stmt, ind, p->id); 1182 + ind++; 1183 + count++; 1184 + p = p->next; 1185 + } 1186 + while (1) 1187 + { 1188 + /* scrolling the result set */ 1189 + ret = sqlite3_step (stmt); 1190 + if (ret == SQLITE_DONE) 1191 + { 1192 + /* there are no more rows to fetch - we can stop looping */ 1193 + break; 1194 + } 1195 + if (ret == SQLITE_ROW) 1196 + { 1197 + /* ok, we've just fetched a valid row */ 1198 + id = sqlite3_column_int64 (stmt, 0); 1199 + alias = sqlite3_column_int64 (stmt, 1); 1200 + lat = sqlite3_column_double (stmt, 2); 1201 + lon = sqlite3_column_double (stmt, 3); 1202 + refcount = sqlite3_column_int (stmt, 4); 1203 + p = xway->first; 1204 + while (p) 1205 + { 1206 + if (p->id == id) 1207 + { 1208 + p->lat = lat; 1209 + p->lon = lon; 1210 + p->alias = alias; 1211 + p->refcount = refcount; 1212 + p->ignore = 0; 1213 + } 1214 + p = p->next; 1215 + } 1216 + } 1217 + else 1218 + { 1219 + /* some unexpected error occurred */ 1220 + fprintf (stderr, "sqlite3_step() error: %s\n", 1221 + sqlite3_errmsg (handle)); 1222 + sqlite3_finalize (stmt); 1223 + return 0; 1224 + } 1225 + } 1226 + sqlite3_finalize (stmt); 1227 + tbd -= how_many; 1228 + base += how_many; 1229 + } 1230 + prev = NULL; 1231 + p = xway->first; 1232 + while (p) 1233 + { 1234 + /* marking repeated points as invalid */ 1235 + if (p->ignore) 1236 + { 1237 + p = p->next; 1238 + continue; 1239 + } 1240 + if (prev) 1241 + { 1242 + if (p->lon == prev->lon && p->lat == prev->lat) 1243 + p->ignore = 1; 1244 + } 1245 + prev = p; 1246 + p = p->next; 1247 + } 1248 + points = 0; 1249 + p = xway->first; 1250 + while (p) 1251 + { 1252 + if (p->ignore == 0) 1253 + points++; 1254 + p = p->next; 1255 + } 1256 + if (points < 2) 1257 + { 1258 + /* discarding stupid degenerated lines - oh yes, there are lots of them !!! */ 1259 + return -1; 1260 + } 1261 +/* creating a new ARC */ 1262 + pa = malloc (sizeof (struct arc)); 1263 + pa->geom = NULL; 1264 + pa->next = NULL; 1265 + xway->first_arc = pa; 1266 + xway->last_arc = pa; 1267 + pa->dyn = gaiaAllocDynamicLine (); 1268 + p = xway->first; 1269 + while (p) 1270 + { 1271 + /* setting up dynamic lines */ 1272 + if (p->ignore) 1273 + { 1274 + /* skipping invalid points */ 1275 + p = p->next; 1276 + continue; 1277 + } 1278 + if (pa->dyn->First == NULL) 1279 + pa->from = p->alias; 1280 + gaiaAppendPointToDynamicLine (pa->dyn, p->lon, p->lat); 1281 + pa->to = p->alias; 1282 + if (p != xway->first && p != xway->last) 1283 + { 1284 + if (p->refcount > 1) 1285 + { 1286 + /* found a graph NODE: creating a new ARC */ 1287 + pa = malloc (sizeof (struct arc)); 1288 + pa->geom = NULL; 1289 + pa->next = NULL; 1290 + xway->last_arc->next = pa; 1291 + xway->last_arc = pa; 1292 + pa->from = p->alias; 1293 + pa->to = p->alias; 1294 + pa->dyn = gaiaAllocDynamicLine (); 1295 + gaiaAppendPointToDynamicLine (pa->dyn, p->lon, p->lat); 1296 + } 1297 + } 1298 + p = p->next; 1299 + } 1300 + pa = xway->first_arc; 1301 + while (pa) 1302 + { 1303 + /* splitting self-closed arcs [rings] */ 1304 + if (pa->dyn->First == NULL) 1305 + { 1306 + /* skipping empty lines */ 1307 + pa = pa->next; 1308 + continue; 1309 + } 1310 + if (pa->dyn->First == pa->dyn->Last) 1311 + { 1312 + /* skipping one-point-only lines */ 1313 + pa = pa->next; 1314 + continue; 1315 + } 1316 + if (pa->dyn->First->X == pa->dyn->Last->X 1317 + && pa->dyn->First->Y == pa->dyn->Last->Y) 1318 + { 1319 + /* found a self-closure */ 1320 + gaiaDynamicLinePtr saved = pa->dyn; 1321 + struct arc *pbis; 1322 + gaiaPointPtr pt; 1323 + int limit; 1324 + sqlite3_int64 node_id; 1325 + points = 0; 1326 + pt = saved->First; 1327 + while (pt) 1328 + { 1329 + /* counting how many points are there */ 1330 + points++; 1331 + pt = pt->Next; 1332 + } 1333 + limit = points / 2; 1334 + /* appending a new arc */ 1335 + pbis = malloc (sizeof (struct arc)); 1336 + pbis->geom = NULL; 1337 + pbis->next = NULL; 1338 + xway->last_arc->next = pbis; 1339 + xway->last_arc = pbis; 1340 + pbis->to = pa->to; 1341 + pbis->dyn = gaiaAllocDynamicLine (); 1342 + pa->dyn = gaiaAllocDynamicLine (); 1343 + ind = 0; 1344 + pt = saved->First; 1345 + while (pt) 475 1346 { 476 - /* copying line's points */ 477 - double x; 478 - double y; 479 - gaiaGetPoint (ln->Coords, iv, &x, &y); 480 - gaiaSetPoint (ln2->Coords, iv, x, y); 1347 + /* appending points */ 1348 + if (ind < limit) 1349 + gaiaAppendPointToDynamicLine (pa->dyn, pt->X, pt->Y); 1350 + else if (ind == limit) 1351 + { 1352 + gaiaAppendPointToDynamicLine (pa->dyn, pt->X, 1353 + pt->Y); 1354 + gaiaAppendPointToDynamicLine (pbis->dyn, pt->X, 1355 + pt->Y); 1356 + node_id = find_node (xway, pt->X, pt->Y); 1357 + } 1358 + else 1359 + gaiaAppendPointToDynamicLine (pbis->dyn, pt->X, 1360 + pt->Y); 1361 + ind++; 1362 + pt = pt->Next; 481 1363 } 482 - gaiaToSpatiaLiteBlobWkb (g, &blob, &blob_size); 483 - ret = 484 - arcs_insert (params, way->id, class, name, oneway, blob, 485 - blob_size); 486 - gaiaFreeGeomColl (g); 487 - if (!ret) 488 - return READOSM_ABORT; 489 - ln = ln->Next; 490 - } 491 - gaiaFreeGeomColl (geom); 492 - } 493 - return READOSM_OK; 1364 + /* adjusting the node */ 1365 + pa->to = node_id; 1366 + pbis->from = node_id; 1367 + gaiaFreeDynamicLine (saved); 1368 + } 1369 + pa = pa->next; 1370 + } 1371 + gaiaEllipseParams ("WGS84", &a, &b, &rf); 1372 + pa = xway->first_arc; 1373 + while (pa) 1374 + { 1375 + /* setting up geometries */ 1376 + gaiaPointPtr pt; 1377 + if (pa->dyn->First == NULL) 1378 + { 1379 + /* skipping empty lines */ 1380 + pa = pa->next; 1381 + continue; 1382 + } 1383 + if (pa->dyn->First == pa->dyn->Last) 1384 + { 1385 + /* skipping one-point-only lines */ 1386 + pa = pa->next; 1387 + continue; 1388 + } 1389 + points = 0; 1390 + pt = pa->dyn->First; 1391 + while (pt) 1392 + { 1393 + /* counting how many points are there */ 1394 + points++; 1395 + pt = pt->Next; 1396 + } 1397 + pa->geom = gaiaAllocGeomColl (); 1398 + pa->geom->Srid = 4326; 1399 + line = gaiaAddLinestringToGeomColl (pa->geom, points); 1400 + ind = 0; 1401 + pt = pa->dyn->First; 1402 + while (pt) 1403 + { 1404 + /* setting up linestring coords */ 1405 + gaiaSetPoint (line->Coords, ind, pt->X, pt->Y); 1406 + ind++; 1407 + pt = pt->Next; 1408 + } 1409 + gaiaFreeDynamicLine (pa->dyn); 1410 + pa->dyn = NULL; 1411 + pa->length = 1412 + gaiaGreatCircleTotalLength (a, b, 1413 + pa->geom->FirstLinestring-> 1414 + DimensionModel, 1415 + pa->geom->FirstLinestring->Coords, 1416 + pa->geom->FirstLinestring->Points); 1417 + pa->cost = compute_time (xway->class, pa->length); 1418 + pa = pa->next; 1419 + } 1420 + return 1; 494 1421 } 495 1422 496 1423 static int 497 -tmp_nodes_insert (struct aux_params *params, const readosm_node * node) 1424 +insert_arc_bidir (sqlite3 * handle, sqlite3_stmt * stmt, struct way *xway, 1425 + struct arc *xarc) 498 1426 { 499 -/* inserts a node into the corresponding temporary table */ 1427 +/* inserting a bidirectional ARC [OSM road] into the DB */ 500 1428 int ret; 501 - if (params->ins_tmp_nodes_stmt == NULL) 502 - return 1; 503 - sqlite3_reset (params->ins_tmp_nodes_stmt); 504 - sqlite3_clear_bindings (params->ins_tmp_nodes_stmt); 505 - sqlite3_bind_int64 (params->ins_tmp_nodes_stmt, 1, node->id); 506 - sqlite3_bind_double (params->ins_tmp_nodes_stmt, 2, node->latitude); 507 - sqlite3_bind_double (params->ins_tmp_nodes_stmt, 3, node->longitude); 508 - ret = sqlite3_step (params->ins_tmp_nodes_stmt); 1429 + unsigned char *blob; 1430 + int blob_size; 1431 + const char *unknown = "unknown"; 1432 + sqlite3_reset (stmt); 1433 + sqlite3_clear_bindings (stmt); 1434 + sqlite3_bind_int64 (stmt, 1, xway->id); 1435 + sqlite3_bind_text (stmt, 2, xway->class, strlen (xway->class), 1436 + SQLITE_STATIC); 1437 + sqlite3_bind_int64 (stmt, 3, xarc->from); 1438 + sqlite3_bind_int64 (stmt, 4, xarc->to); 1439 + if (xway->name) 1440 + sqlite3_bind_text (stmt, 5, xway->name, strlen (xway->name), 1441 + SQLITE_STATIC); 1442 + else 1443 + sqlite3_bind_text (stmt, 5, unknown, strlen (unknown), SQLITE_STATIC); 1444 + if (xway->oneway) 1445 + { 1446 + /* oneway arc */ 1447 + if (xway->reverse) 1448 + { 1449 + /* reverse */ 1450 + sqlite3_bind_int (stmt, 6, 0); 1451 + sqlite3_bind_int (stmt, 7, 1); 1452 + } 1453 + else 1454 + { 1455 + /* conformant */ 1456 + sqlite3_bind_int (stmt, 6, 1); 1457 + sqlite3_bind_int (stmt, 7, 0); 1458 + } 1459 + } 1460 + else 1461 + { 1462 + /* bidirectional arc */ 1463 + sqlite3_bind_int (stmt, 6, 1); 1464 + sqlite3_bind_int (stmt, 7, 1); 1465 + } 1466 + sqlite3_bind_double (stmt, 8, xarc->length); 1467 + sqlite3_bind_double (stmt, 9, xarc->cost); 1468 + gaiaToSpatiaLiteBlobWkb (xarc->geom, &blob, &blob_size); 1469 + sqlite3_bind_blob (stmt, 10, blob, blob_size, free); 1470 + ret = sqlite3_step (stmt); 509 1471 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 510 1472 return 1; 511 - fprintf (stderr, "sqlite3_step() error: INS_TMP_NODES\n"); 512 - sqlite3_finalize (params->ins_tmp_nodes_stmt); 513 - params->ins_tmp_nodes_stmt = NULL; 1473 + fprintf (stderr, "sqlite3_step() error: %s\n", sqlite3_errmsg (handle)); 1474 + sqlite3_finalize (stmt); 514 1475 return 0; 515 1476 } 516 1477 517 1478 static int 518 -consume_node (const void *user_data, const readosm_node * node) 519 -{ 520 -/* processing an OSM Node (ReadOSM callback function) */ 521 - struct aux_params *params = (struct aux_params *) user_data; 522 - 523 - if (!tmp_nodes_insert (params, node)) 524 - return READOSM_ABORT; 525 - return READOSM_OK; 1479 +insert_arc_unidir (sqlite3 * handle, sqlite3_stmt * stmt, struct way *xway, 1480 + struct arc *xarc) 1481 +{ 1482 +/* inserting an unidirectional ARC [OSM road] into the DB */ 1483 + int ret; 1484 + unsigned char *blob; 1485 + int blob_size; 1486 + const char *unknown = "unknown"; 1487 + int straight = 0; 1488 + int reverse = 0; 1489 + int count = 0; 1490 + if (xway->oneway) 1491 + { 1492 + /* oneway arc */ 1493 + if (xway->reverse) 1494 + { 1495 + /* reverse */ 1496 + reverse = 1; 1497 + } 1498 + else 1499 + { 1500 + /* conformant */ 1501 + straight = 1; 1502 + } 1503 + } 1504 + else 1505 + { 1506 + /* bidirectional arc */ 1507 + straight = 1; 1508 + reverse = 1; 1509 + } 1510 + if (straight) 1511 + { 1512 + /* inserting to FromTo arc */ 1513 + sqlite3_reset (stmt); 1514 + sqlite3_clear_bindings (stmt); 1515 + sqlite3_bind_int64 (stmt, 1, xway->id); 1516 + sqlite3_bind_text (stmt, 2, xway->class, strlen (xway->class), 1517 + SQLITE_STATIC); 1518 + sqlite3_bind_int64 (stmt, 3, xarc->from); 1519 + sqlite3_bind_int64 (stmt, 4, xarc->to); 1520 + if (xway->name) 1521 + sqlite3_bind_text (stmt, 5, xway->name, strlen (xway->name), 1522 + SQLITE_STATIC); 1523 + else 1524 + sqlite3_bind_text (stmt, 5, unknown, strlen (unknown), 1525 + SQLITE_STATIC); 1526 + sqlite3_bind_double (stmt, 6, xarc->length); 1527 + sqlite3_bind_double (stmt, 7, xarc->cost); 1528 + gaiaToSpatiaLiteBlobWkb (xarc->geom, &blob, &blob_size); 1529 + sqlite3_bind_blob (stmt, 8, blob, blob_size, free); 1530 + ret = sqlite3_step (stmt); 1531 + if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1532 + count++; 1533 + else 1534 + { 1535 + fprintf (stderr, "sqlite3_step() error: %s\n", 1536 + sqlite3_errmsg (handle)); 1537 + sqlite3_finalize (stmt); 1538 + return 0; 1539 + } 1540 + } 1541 + if (reverse) 1542 + { 1543 + /* inserting to ToFrom arc */ 1544 + gaiaLinestringPtr ln1; 1545 + gaiaLinestringPtr ln2; 1546 + int iv; 1547 + int iv2; 1548 + double x; 1549 + double y; 1550 + sqlite3_reset (stmt); 1551 + sqlite3_clear_bindings (stmt); 1552 + sqlite3_bind_int64 (stmt, 1, xway->id); 1553 + sqlite3_bind_text (stmt, 2, xway->class, strlen (xway->class), 1554 + SQLITE_STATIC); 1555 + sqlite3_bind_int64 (stmt, 3, xarc->to); 1556 + sqlite3_bind_int64 (stmt, 4, xarc->from); 1557 + if (xway->name) 1558 + sqlite3_bind_text (stmt, 5, xway->name, strlen (xway->name), 1559 + SQLITE_STATIC); 1560 + else 1561 + sqlite3_bind_text (stmt, 5, unknown, strlen (unknown), 1562 + SQLITE_STATIC); 1563 + /* reversing the linestring */ 1564 + ln1 = xarc->geom->FirstLinestring; 1565 + ln2 = gaiaAllocLinestring (ln1->Points); 1566 + xarc->geom->FirstLinestring = ln2; 1567 + iv2 = 0; 1568 + for (iv = ln1->Points - 1; iv >= 0; iv--) 1569 + { 1570 + gaiaGetPoint (ln1->Coords, iv, &x, &y); 1571 + gaiaSetPoint (ln2->Coords, iv2, x, y); 1572 + iv2++; 1573 + } 1574 + gaiaFreeLinestring (ln1); 1575 + sqlite3_bind_double (stmt, 6, xarc->length); 1576 + sqlite3_bind_double (stmt, 7, xarc->cost); 1577 + gaiaToSpatiaLiteBlobWkb (xarc->geom, &blob, &blob_size); 1578 + sqlite3_bind_blob (stmt, 8, blob, blob_size, free); 1579 + ret = sqlite3_step (stmt); 1580 + if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1581 + count++; 1582 + else 1583 + { 1584 + fprintf (stderr, "sqlite3_step() error: %s\n", 1585 + sqlite3_errmsg (handle)); 1586 + sqlite3_finalize (stmt); 1587 + return 0; 1588 + } 1589 + } 1590 + return count; 526 1591 } 527 1592 528 1593 static int 529 -populate_graph_nodes (sqlite3 * handle, const char *table) 1594 +parse_ways_pass_2 (FILE * xml, sqlite3 * handle, const char *table, 1595 + int double_arcs, char *value, int railways) 530 1596 { 1597 +/* parsing <way> tags from XML file - Step II */ 1598 + sqlite3_stmt *stmt; 531 1599 int ret; 532 1600 char *sql_err = NULL; 533 - char sql[8192]; 534 - char sql2[1024]; 535 - sqlite3_stmt *query_stmt = NULL; 536 - sqlite3_stmt *update_stmt = NULL; 537 - 538 -/* populating GRAPH_NODES */ 539 - strcpy (sql, "INSERT OR IGNORE INTO graph_nodes (lon, lat) "); 540 - strcat (sql, "SELECT ST_X(ST_StartPoint(Geometry)), "); 541 - strcat (sql, "ST_Y(ST_StartPoint(Geometry)) "); 542 - sprintf (sql2, "FROM \"%s\" ", table); 543 - strcat (sql, sql2); 544 - strcat (sql, "UNION "); 545 - strcat (sql, "SELECT ST_X(ST_EndPoint(Geometry)), "); 546 - strcat (sql, "ST_Y(ST_EndPoint(Geometry)) "); 547 - sprintf (sql2, "FROM \"%s\"", table); 548 - strcat (sql, sql2); 549 - 550 - ret = sqlite3_exec (handle, sql, NULL, NULL, &sql_err); 551 - if (ret != SQLITE_OK) 552 - { 553 - fprintf (stderr, "GraphNodes SQL error: %s\n", sql_err); 554 - sqlite3_free (sql_err); 555 - return 0; 556 - } 557 - 558 -/* setting OSM-IDs to graph-nodes */ 559 -/* the complete operation is handled as a unique SQL Transaction */ 1601 + struct way xway; 1602 + int way = 0; 1603 + int count = 0; 1604 + int c; 1605 + char *p; 1606 + struct check_tag tag; 1607 + struct arc *xarc; 1608 + init_tag (&tag, 5); 1609 + xway.first = NULL; 1610 + xway.last = NULL; 1611 + xway.first_kv = NULL; 1612 + xway.last_kv = NULL; 1613 + xway.first_arc = NULL; 1614 + xway.last_arc = NULL; 1615 + xway.class = NULL; 1616 + xway.name = NULL; 1617 + 1618 +/* the complete operation is handled as an unique SQL Transaction */ 560 1619 ret = sqlite3_exec (handle, "BEGIN", NULL, NULL, &sql_err); 561 1620 if (ret != SQLITE_OK) 562 1621 { 563 1622 fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 564 1623 sqlite3_free (sql_err); 565 - return 0; 566 - } 567 - 568 - strcpy (sql, "SELECT n.ROWID, t.id FROM osm_tmp_nodes AS t "); 569 - strcat (sql, "JOIN graph_nodes AS n ON (t.lon = n.lon AND t.lat = n.lat)"); 570 - ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &query_stmt, NULL); 571 - if (ret != SQLITE_OK) 572 - { 573 - fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle)); 574 - goto error; 575 - } 576 - 577 - strcpy (sql, "UPDATE graph_nodes SET osm_id = ? "); 578 - strcat (sql, "WHERE ROWID = ?"); 579 - ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &update_stmt, NULL); 580 - if (ret != SQLITE_OK) 581 - { 582 - fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle)); 583 - goto error; 584 - } 585 - 586 - while (1) 587 - { 588 - ret = sqlite3_step (query_stmt); 589 - if (ret == SQLITE_DONE) 590 - break; 591 - if (ret == SQLITE_ROW) 592 - { 593 - sqlite3_int64 id = sqlite3_column_int64 (query_stmt, 0); 594 - sqlite3_int64 osm_id = sqlite3_column_int64 (query_stmt, 1); 595 - 596 - /* udating the GraphNote */ 597 - sqlite3_reset (update_stmt); 598 - sqlite3_clear_bindings (update_stmt); 599 - sqlite3_bind_int64 (update_stmt, 1, osm_id); 600 - sqlite3_bind_int64 (update_stmt, 2, id); 601 - ret = sqlite3_step (update_stmt); 602 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 603 - ; 1624 + return -1; 1625 + } 1626 + 1627 +/* preparing the SQL statement */ 1628 + if (double_arcs) 1629 + { 1630 + /* unidirectional arcs */ 1631 + sprintf (value, "INSERT OR IGNORE INTO \"%s\" ", table); 1632 + strcat (value, "(id, osm_id, class, node_from, node_to, name, "); 1633 + strcat (value, "length, cost, geometry) VALUES "); 1634 + strcat (value, "(NULL, ?, ?, ?, ?, ?, ?, ?, ?)"); 1635 + } 1636 + else 1637 + { 1638 + /* bidirectional arcs */ 1639 + sprintf (value, "INSERT OR IGNORE INTO \"%s\" ", table); 1640 + strcat (value, "(id, osm_id, class, node_from, node_to, name, "); 1641 + strcat (value, 1642 + "oneway_fromto, oneway_tofrom, length, cost, geometry) "); 1643 + strcat (value, "VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 1644 + } 1645 + ret = sqlite3_prepare_v2 (handle, value, strlen (value), &stmt, NULL); 1646 + if (ret != SQLITE_OK) 1647 + { 1648 + fprintf (stderr, "SQL error: %s\n%s\n", value, 1649 + sqlite3_errmsg (handle)); 1650 + return -1; 1651 + } 1652 + 1653 + while ((c = getc (xml)) != EOF) 1654 + { 1655 + if (way) 1656 + { 1657 + /* we are inside a <way> tag */ 1658 + *p++ = c; 1659 + } 1660 + update_tag (&tag, c); 1661 + if (strncmp (tag.buf, "<way ", 5) == 0) 1662 + { 1663 + /* opening a <way> tag */ 1664 + way = 1; 1665 + strcpy (value, "<way "); 1666 + p = value + 5; 1667 + continue; 1668 + } 1669 + if (strncmp (tag.buf, "</way", 5) == 0) 1670 + { 1671 + /* closing a <way> tag */ 1672 + *p = '\0'; 1673 + if (!parse_way_tag (value, &xway)) 1674 + { 1675 + clean_way (&xway); 1676 + fprintf (stderr, "ERROR: invalid <way>\n"); 1677 + sqlite3_finalize (stmt); 1678 + return -1; 1679 + } 604 1680 else 605 1681 { 606 - printf ("sqlite3_step() error: %s\n", 607 - sqlite3_errmsg (handle)); 608 - goto error; 1682 + if (check_way (&xway, railways)) 1683 + { 1684 + ret = build_geometry (handle, &xway); 1685 + if (ret == 0) 1686 + { 1687 + fprintf (stderr, 1688 + "ERROR: invalid geometry <way>\n"); 1689 + clean_way (&xway); 1690 + sqlite3_finalize (stmt); 1691 + return -1; 1692 + } 1693 + else if (ret < 0) 1694 + ; 1695 + else 1696 + { 1697 + xarc = xway.first_arc; 1698 + while (xarc) 1699 + { 1700 + if (xarc->geom == NULL) 1701 + { 1702 + /* skipping empty geometries */ 1703 + xarc = xarc->next; 1704 + continue; 1705 + } 1706 + if (double_arcs) 1707 + ret = 1708 + insert_arc_unidir (handle, stmt, 1709 + &xway, xarc); 1710 + else 1711 + ret = 1712 + insert_arc_bidir (handle, stmt, 1713 + &xway, xarc); 1714 + if (!ret) 1715 + { 1716 + clean_way (&xway); 1717 + sqlite3_finalize (stmt); 1718 + return -1; 1719 + } 1720 + count += ret; 1721 + xarc = xarc->next; 1722 + } 1723 + } 1724 + } 1725 + clean_way (&xway); 609 1726 } 610 - } 611 - else 612 - { 613 - printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (handle)); 614 - goto error; 1727 + way = 0; 1728 + continue; 615 1729 } 616 1730 } 617 - 618 - if (query_stmt != NULL) 619 - sqlite3_finalize (query_stmt); 620 - if (update_stmt != NULL) 621 - sqlite3_finalize (update_stmt); 1731 +/* finalizing the INSERT INTO prepared statement */ 1732 + sqlite3_finalize (stmt); 622 1733 623 1734 /* committing the still pending SQL Transaction */ 624 1735 ret = sqlite3_exec (handle, "COMMIT", NULL, NULL, &sql_err); 625 1736 if (ret != SQLITE_OK) 626 1737 { 627 1738 fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 628 1739 sqlite3_free (sql_err); 629 - } 630 - return 1; 631 - 632 - error: 633 - if (query_stmt != NULL) 634 - sqlite3_finalize (query_stmt); 635 - if (update_stmt != NULL) 636 - sqlite3_finalize (update_stmt); 637 - 638 - ret = sqlite3_exec (handle, "ROLLBACK", NULL, NULL, &sql_err); 639 - if (ret != SQLITE_OK) 640 - { 641 - fprintf (stderr, "ROLLBACK TRANSACTION error: %s\n", sql_err); 642 - sqlite3_free (sql_err); 643 - } 1740 + return -1; 1741 + } 1742 + return count; 1743 +} 1744 + 1745 +static int 1746 +pre_check_way (struct way *xway, int railways) 1747 +{ 1748 +/* checks if <way> is interesting to build the road network */ 1749 + struct kv *pkv; 1750 + pkv = xway->first_kv; 1751 + while (pkv) 1752 + { 1753 + if (is_valid_way (pkv->k, pkv->v, railways)) 1754 + return 1; 1755 + pkv = pkv->next; 1756 + } 1757 + return 0; 1758 +} 1759 + 1760 +static int 1761 +update_node (sqlite3 * handle, sqlite3_stmt * stmt, sqlite3_int64 id) 1762 +{ 1763 +/* updating the node reference count */ 1764 + int ret; 1765 + sqlite3_reset (stmt); 1766 + sqlite3_clear_bindings (stmt); 1767 + sqlite3_bind_int64 (stmt, 1, id); 1768 + ret = sqlite3_step (stmt); 1769 + if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1770 + return 1; 1771 + fprintf (stderr, "sqlite3_step() error: %s\n", sqlite3_errmsg (handle)); 1772 + sqlite3_finalize (stmt); 644 1773 return 0; 645 1774 } 646 1775 647 1776 static int 648 -set_node_ids (sqlite3 * handle, const char *table) 1777 +mark_nodes (sqlite3 * handle, sqlite3_stmt * stmt_upd, struct way *xway) 1778 +{ 1779 +/* examining the node-reference list representing an ARC */ 1780 + int ret; 1781 + sqlite3_stmt *stmt; 1782 + sqlite3_int64 id; 1783 + double lon; 1784 + double lat; 1785 + char sql[8192]; 1786 + int ind; 1787 + int points = 0; 1788 + int tbd; 1789 + int count; 1790 + int base = 0; 1791 + int block = 128; 1792 + int how_many; 1793 + struct node_ref *p; 1794 + p = xway->first; 1795 + while (p) 1796 + { 1797 + points++; 1798 + p = p->next; 1799 + } 1800 + tbd = points; 1801 + while (tbd > 0) 1802 + { 1803 + /* requesting max 128 points at each time */ 1804 + if (tbd < block) 1805 + how_many = tbd; 1806 + else 1807 + how_many = block; 1808 + strcpy (sql, "SELECT id, lat, lon FROM osm_tmp_nodes "); 1809 + strcat (sql, "WHERE id IN ("); 1810 + for (ind = 0; ind < how_many; ind++) 1811 + { 1812 + if (ind == 0) 1813 + strcat (sql, "?"); 1814 + else 1815 + strcat (sql, ",?"); 1816 + } 1817 + strcat (sql, ")"); 1818 + ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL); 1819 + if (ret != SQLITE_OK) 1820 + { 1821 + fprintf (stderr, "SQL error: %s\n%s\n", sql, 1822 + sqlite3_errmsg (handle)); 1823 + return 0; 1824 + } 1825 + sqlite3_reset (stmt); 1826 + sqlite3_clear_bindings (stmt); 1827 + ind = 1; 1828 + count = 0; 1829 + p = xway->first; 1830 + while (p) 1831 + { 1832 + if (count < base) 1833 + { 1834 + count++; 1835 + p = p->next; 1836 + continue; 1837 + } 1838 + if (count >= (base + how_many)) 1839 + break; 1840 + sqlite3_bind_int64 (stmt, ind, p->id); 1841 + ind++; 1842 + count++; 1843 + p = p->next; 1844 + } 1845 + while (1) 1846 + { 1847 + /* scrolling the result set */ 1848 + ret = sqlite3_step (stmt); 1849 + if (ret == SQLITE_DONE) 1850 + { 1851 + /* there are no more rows to fetch - we can stop looping */ 1852 + break; 1853 + } 1854 + if (ret == SQLITE_ROW) 1855 + { 1856 + /* ok, we've just fetched a valid row */ 1857 + id = sqlite3_column_int (stmt, 0); 1858 + lat = sqlite3_column_double (stmt, 1); 1859 + lon = sqlite3_column_double (stmt, 2); 1860 + p = xway->first; 1861 + while (p) 1862 + { 1863 + if (p->id == id) 1864 + { 1865 + p->lat = lat; 1866 + p->lon = lon; 1867 + p->ignore = 0; 1868 + } 1869 + p = p->next; 1870 + } 1871 + } 1872 + else 1873 + { 1874 + /* some unexpected error occurred */ 1875 + fprintf (stderr, "sqlite3_step() error: %s\n", 1876 + sqlite3_errmsg (handle)); 1877 + sqlite3_finalize (stmt); 1878 + return 0; 1879 + } 1880 + } 1881 + sqlite3_finalize (stmt); 1882 + tbd -= how_many; 1883 + base += how_many; 1884 + } 1885 + p = xway->first; 1886 + while (p) 1887 + { 1888 + /* updating nodes ref-count */ 1889 + if (p->ignore == 0) 1890 + update_node (handle, stmt_upd, p->id); 1891 + p = p->next; 1892 + } 1893 + return 1; 1894 +} 1895 + 1896 +static int 1897 +parse_ways_pass_1 (FILE * xml, sqlite3 * handle, char *value, int railways) 649 1898 { 650 -/* assigning IDs to Nodes of the Graph */ 1899 +/* parsing <way> tags from XML file - Pass I */ 1900 + sqlite3_stmt *stmt; 651 1901 int ret; 652 1902 char *sql_err = NULL; 653 - char sql[8192]; 654 - char sql2[1024]; 655 - sqlite3_stmt *query_stmt = NULL; 656 - sqlite3_stmt *update_stmt = NULL; 1903 + struct way xway; 1904 + int way = 0; 1905 + int count = 0; 1906 + int c; 1907 + char *p; 1908 + struct check_tag tag; 1909 + init_tag (&tag, 5); 1910 + xway.first = NULL; 1911 + xway.last = NULL; 1912 + xway.first_kv = NULL; 1913 + xway.last_kv = NULL; 1914 + xway.first_arc = NULL; 1915 + xway.last_arc = NULL; 1916 + xway.class = NULL; 1917 + xway.name = NULL; 657 1918 658 -/* the complete operation is handled as a unique SQL Transaction */ 1919 +/* the complete operation is handled as an unique SQL Transaction */ 659 1920 ret = sqlite3_exec (handle, "BEGIN", NULL, NULL, &sql_err); 660 1921 if (ret != SQLITE_OK) 661 1922 { 662 1923 fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 663 1924 sqlite3_free (sql_err); 664 - return 0; 665 - } 666 - 667 -/* querying NodeIds */ 668 - strcpy (sql, "SELECT w.id, n1.ROWID, n2.ROWID "); 669 - sprintf (sql2, "FROM \"%s\" AS w, ", table); 670 - strcat (sql, sql2); 671 - strcat (sql, "graph_nodes AS n1, graph_nodes AS n2 "); 672 - strcat (sql, "WHERE n1.lon = ST_X(ST_StartPoint(w.Geometry)) "); 673 - strcat (sql, "AND n1.lat = ST_Y(ST_StartPoint(w.Geometry)) "); 674 - strcat (sql, "AND n2.lon = ST_X(ST_EndPoint(w.Geometry)) "); 675 - strcat (sql, "AND n2.lat = ST_Y(ST_EndPoint(w.Geometry))"); 676 - ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &query_stmt, NULL); 677 - if (ret != SQLITE_OK) 678 - { 679 - fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle)); 680 - goto error; 681 - } 682 - 683 -/* updating Arcs */ 684 - sprintf (sql, "UPDATE \"%s\" SET node_from = ?, node_to = ? ", table); 685 - strcat (sql, "WHERE id = ?"); 686 - ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &update_stmt, NULL); 687 - if (ret != SQLITE_OK) 688 - { 689 - fprintf (stderr, "SQL error: %s\n%s\n", sql, sqlite3_errmsg (handle)); 690 - goto error; 691 - } 692 - 693 - while (1) 694 - { 695 - ret = sqlite3_step (query_stmt); 696 - if (ret == SQLITE_DONE) 697 - break; 698 - if (ret == SQLITE_ROW) 699 - { 700 - sqlite3_int64 id = sqlite3_column_int64 (query_stmt, 0); 701 - sqlite3_int64 node_from = sqlite3_column_int64 (query_stmt, 1); 702 - sqlite3_int64 node_to = sqlite3_column_int64 (query_stmt, 2); 703 - 704 - /* udating the Arc */ 705 - sqlite3_reset (update_stmt); 706 - sqlite3_clear_bindings (update_stmt); 707 - sqlite3_bind_int64 (update_stmt, 1, node_from); 708 - sqlite3_bind_int64 (update_stmt, 2, node_to); 709 - sqlite3_bind_int64 (update_stmt, 3, id); 710 - ret = sqlite3_step (update_stmt); 711 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 712 - ; 1925 + return -1; 1926 + } 1927 +/* preparing the SQL statement */ 1928 + strcpy (value, "UPDATE osm_tmp_nodes SET refcount = refcount + 1 "); 1929 + strcat (value, "WHERE id = ?"); 1930 + ret = sqlite3_prepare_v2 (handle, value, strlen (value), &stmt, NULL); 1931 + if (ret != SQLITE_OK) 1932 + { 1933 + fprintf (stderr, "SQL error: %s\n%s\n", value, 1934 + sqlite3_errmsg (handle)); 1935 + return -1; 1936 + } 1937 + 1938 + while ((c = getc (xml)) != EOF) 1939 + { 1940 + if (way) 1941 + { 1942 + /* we are inside a <way> tag */ 1943 + *p++ = c; 1944 + } 1945 + update_tag (&tag, c); 1946 + if (strncmp (tag.buf, "<way ", 5) == 0) 1947 + { 1948 + /* opening a <way> tag */ 1949 + way = 1; 1950 + strcpy (value, "<way "); 1951 + p = value + 5; 1952 + continue; 1953 + } 1954 + if (strncmp (tag.buf, "</way", 5) == 0) 1955 + { 1956 + /* closing a <way> tag */ 1957 + *p = '\0'; 1958 + if (!parse_way_tag (value, &xway)) 1959 + { 1960 + clean_way (&xway); 1961 + fprintf (stderr, "ERROR: invalid <way>\n"); 1962 + return -1; 1963 + } 713 1964 else 714 1965 { 715 - printf ("sqlite3_step() error: %s\n", 716 - sqlite3_errmsg (handle)); 717 - goto error; 1966 + if (pre_check_way (&xway, railways)) 1967 + { 1968 + if (!mark_nodes (handle, stmt, &xway)) 1969 + { 1970 + fprintf (stderr, 1971 + "ERROR: invalid node-reference list: <way>\n"); 1972 + clean_way (&xway); 1973 + return -1; 1974 + } 1975 + count++; 1976 + } 1977 + clean_way (&xway); 718 1978 } 719 - } 720 - else 721 - { 722 - printf ("sqlite3_step() error: %s\n", sqlite3_errmsg (handle)); 723 - goto error; 1979 + way = 0; 1980 + continue; 724 1981 } 725 1982 } 726 - 727 - if (query_stmt != NULL) 728 - sqlite3_finalize (query_stmt); 729 - if (update_stmt != NULL) 730 - sqlite3_finalize (update_stmt); 1983 +/* finalizing the INSERT INTO prepared statement */ 1984 + sqlite3_finalize (stmt); 731 1985 732 1986 /* committing the still pending SQL Transaction */ 733 1987 ret = sqlite3_exec (handle, "COMMIT", NULL, NULL, &sql_err); 734 1988 if (ret != SQLITE_OK) 735 1989 { 736 1990 fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 737 1991 sqlite3_free (sql_err); 1992 + return -1; 738 1993 } 739 - return 1; 1994 + return count; 1995 +} 740 1996 741 - error: 742 - if (query_stmt != NULL) 743 - sqlite3_finalize (query_stmt); 744 - if (update_stmt != NULL) 745 - sqlite3_finalize (update_stmt); 746 - 747 - ret = sqlite3_exec (handle, "ROLLBACK", NULL, NULL, &sql_err); 1997 +static void 1998 +db_cleanup (sqlite3 * handle) 1999 +{ 2000 + int ret; 2001 + char *sql_err = NULL; 2002 +/* dropping the OSM_TMP_NODES table */ 2003 + printf ("\nDropping temporary table 'osm_tmp_nodes' ... wait please ...\n"); 2004 + ret = 2005 + sqlite3_exec (handle, "DROP TABLE osm_tmp_nodes", NULL, NULL, &sql_err); 748 2006 if (ret != SQLITE_OK) 749 2007 { 750 - fprintf (stderr, "ROLLBACK TRANSACTION error: %s\n", sql_err); 2008 + fprintf (stderr, "'DROP TABLE osm_tmp_nodes' error: %s\n", sql_err); 751 2009 sqlite3_free (sql_err); 2010 + return; 752 2011 } 753 - return 0; 754 -} 755 - 756 -static double 757 -compute_cost (struct aux_params *params, const char *class, double length) 758 -{ 759 -/* computing the travel time [cost] */ 760 - double speed = params->default_speed; /* speed, in Km/h */ 761 - double msec; 762 - 763 - if (class != NULL) 764 - { 765 - struct aux_speed *ps = params->first_speed; 766 - while (ps) 767 - { 768 - if (strcmp (ps->class_name, class) == 0) 769 - { 770 - speed = ps->speed; 771 - break; 772 - } 773 - ps = ps->next; 774 - } 775 - } 776 - 777 - msec = speed * 1000.0 / 3600.0; /* transforming speed in m/sec */ 778 - return length / msec; 779 -} 780 - 781 -static int 782 -set_lengths_costs (struct aux_params *params, const char *table) 783 -{ 784 -/* assigning lengths and costs to each Arc of the Graph */ 785 - int ret; 786 - char *sql_err = NULL; 787 - char sql[8192]; 788 - char sql2[1024]; 789 - sqlite3_stmt *query_stmt = NULL; 790 - sqlite3_stmt *update_stmt = NULL; 791 - 792 -/* the complete operation is handled as a unique SQL Transaction */ 793 - ret = sqlite3_exec (params->db_handle, "BEGIN", NULL, NULL, &sql_err); 2012 + printf ("\tDropped table 'osm_tmp_nodes'\n"); 2013 +/* dropping the 'from_to' index */ 2014 + printf ("\nDropping index 'from_to' ... wait please ...\n"); 2015 + ret = sqlite3_exec (handle, "DROP INDEX from_to", NULL, NULL, &sql_err); 794 2016 if (ret != SQLITE_OK) 795 2017 { 796 - fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 2018 + fprintf (stderr, "'DROP INDEX from_to' error: %s\n", sql_err); 797 2019 sqlite3_free (sql_err); 798 - return 0; 799 - } 800 - 801 -/* querying Arcs */ 802 - strcpy (sql, "SELECT id, class, GreatCircleLength(Geometry) "); 803 - sprintf (sql2, "FROM \"%s\"", table); 804 - strcat (sql, sql2); 805 - ret = sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 806 - &query_stmt, NULL); 807 - if (ret != SQLITE_OK) 808 - { 809 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 810 - sqlite3_errmsg (params->db_handle)); 811 - goto error; 812 - } 813 - 814 -/* updating Arcs */ 815 - sprintf (sql, "UPDATE \"%s\" SET length = ?, cost = ? ", table); 816 - strcat (sql, "WHERE id = ?"); 817 - ret = sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 818 - &update_stmt, NULL); 819 - if (ret != SQLITE_OK) 820 - { 821 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 822 - sqlite3_errmsg (params->db_handle)); 823 - goto error; 824 - } 825 - 826 - while (1) 827 - { 828 - ret = sqlite3_step (query_stmt); 829 - if (ret == SQLITE_DONE) 830 - break; 831 - if (ret == SQLITE_ROW) 832 - { 833 - sqlite3_int64 id = sqlite3_column_int64 (query_stmt, 0); 834 - const char *class = 835 - (const char *) sqlite3_column_text (query_stmt, 1); 836 - double length = sqlite3_column_double (query_stmt, 2); 837 - double cost = compute_cost (params, class, length); 838 - 839 - /* udating the Arc */ 840 - sqlite3_reset (update_stmt); 841 - sqlite3_clear_bindings (update_stmt); 842 - sqlite3_bind_double (update_stmt, 1, length); 843 - sqlite3_bind_double (update_stmt, 2, cost); 844 - sqlite3_bind_int64 (update_stmt, 3, id); 845 - ret = sqlite3_step (update_stmt); 846 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 847 - ; 848 - else 849 - { 850 - printf ("sqlite3_step() error: %s\n", 851 - sqlite3_errmsg (params->db_handle)); 852 - goto error; 853 - } 854 - } 855 - else 856 - { 857 - printf ("sqlite3_step() error: %s\n", 858 - sqlite3_errmsg (params->db_handle)); 859 - goto error; 860 - } 861 - } 862 - 863 - if (query_stmt != NULL) 864 - sqlite3_finalize (query_stmt); 865 - if (update_stmt != NULL) 866 - sqlite3_finalize (update_stmt); 867 - 868 -/* committing the still pending SQL Transaction */ 869 - ret = sqlite3_exec (params->db_handle, "COMMIT", NULL, NULL, &sql_err); 870 - if (ret != SQLITE_OK) 871 - { 872 - fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 873 - sqlite3_free (sql_err); 874 - } 875 - return 1; 876 - 877 - error: 878 - if (query_stmt != NULL) 879 - sqlite3_finalize (query_stmt); 880 - if (update_stmt != NULL) 881 - sqlite3_finalize (update_stmt); 882 - 883 - ret = sqlite3_exec (params->db_handle, "ROLLBACK", NULL, NULL, &sql_err); 884 - if (ret != SQLITE_OK) 885 - { 886 - fprintf (stderr, "ROLLBACK TRANSACTION error: %s\n", sql_err); 887 - sqlite3_free (sql_err); 888 - } 889 - return 0; 890 -} 891 - 892 -static int 893 -create_qualified_nodes (struct aux_params *params, const char *table) 894 -{ 895 -/* creating and feeding the helper table representing Nodes of the Graph */ 896 - int ret; 897 - char *sql_err = NULL; 898 - char sql[8192]; 899 - char sql2[1024]; 900 - sqlite3_stmt *query_stmt = NULL; 901 - sqlite3_stmt *insert_stmt = NULL; 902 - sqlite3_stmt *update_stmt = NULL; 903 - char *err_msg = NULL; 904 - 905 - printf ("\nCreating helper table '%s_nodes' ... wait please ...\n", table); 906 - sprintf (sql, "CREATE TABLE \"%s_nodes\" (\n", table); 907 - strcat (sql, "node_id INTEGER NOT NULL PRIMARY KEY,\n"); 908 - strcat (sql, "osm_id INTEGER,\n"); 909 - strcat (sql, "cardinality INTEGER NOT NULL)\n"); 910 - ret = sqlite3_exec (params->db_handle, sql, NULL, NULL, &err_msg); 911 - if (ret != SQLITE_OK) 912 - { 913 - fprintf (stderr, "CREATE TABLE '%s_nodes' error: %s\n", table, 914 - err_msg); 915 - sqlite3_free (err_msg); 916 - sqlite3_close (params->db_handle); 917 - return 0; 918 - } 919 - 920 - sprintf (sql, "SELECT AddGeometryColumn('%s_nodes', 'geometry', ", table); 921 - strcat (sql, " 4326, 'POINT', 'XY')"); 922 - ret = sqlite3_exec (params->db_handle, sql, NULL, NULL, &err_msg); 923 - if (ret != SQLITE_OK) 924 - { 925 - fprintf (stderr, "AddGeometryColumn() error: %s\n", err_msg); 926 - sqlite3_free (err_msg); 927 - sqlite3_close (params->db_handle); 928 - return 0; 929 - } 930 - 931 -/* the complete operation is handled as a unique SQL Transaction */ 932 - ret = sqlite3_exec (params->db_handle, "BEGIN", NULL, NULL, &sql_err); 933 - if (ret != SQLITE_OK) 934 - { 935 - fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 936 - sqlite3_free (sql_err); 937 - return 0; 938 - } 939 - 940 -/* querying Arcs */ 941 - strcpy (sql, "SELECT node_from, ST_StartPoint(Geometry), "); 942 - strcat (sql, "node_to, ST_EndPoint(Geometry) "); 943 - sprintf (sql2, "FROM \"%s\"", table); 944 - strcat (sql, sql2); 945 - ret = sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 946 - &query_stmt, NULL); 947 - if (ret != SQLITE_OK) 948 - { 949 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 950 - sqlite3_errmsg (params->db_handle)); 951 - goto error; 952 - } 953 - 954 -/* Inserting Nodes */ 955 - sprintf (sql, 956 - "INSERT OR IGNORE INTO \"%s_nodes\" (node_id, cardinality, geometry) ", 957 - table); 958 - strcat (sql, "VALUES (?, 0, ?)"); 959 - ret = sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 960 - &insert_stmt, NULL); 961 - if (ret != SQLITE_OK) 962 - { 963 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 964 - sqlite3_errmsg (params->db_handle)); 965 - goto error; 966 - } 967 - 968 - while (1) 969 - { 970 - ret = sqlite3_step (query_stmt); 971 - if (ret == SQLITE_DONE) 972 - break; 973 - if (ret == SQLITE_ROW) 974 - { 975 - sqlite3_int64 id1 = sqlite3_column_int64 (query_stmt, 0); 976 - const void *blob1 = sqlite3_column_blob (query_stmt, 1); 977 - int len1 = sqlite3_column_bytes (query_stmt, 1); 978 - sqlite3_int64 id2 = sqlite3_column_int64 (query_stmt, 2); 979 - const void *blob2 = sqlite3_column_blob (query_stmt, 3); 980 - int len2 = sqlite3_column_bytes (query_stmt, 3); 981 - 982 - /* inserting the Node (from) */ 983 - sqlite3_reset (insert_stmt); 984 - sqlite3_clear_bindings (insert_stmt); 985 - sqlite3_bind_int64 (insert_stmt, 1, id1); 986 - sqlite3_bind_blob (insert_stmt, 2, blob1, len1, SQLITE_STATIC); 987 - ret = sqlite3_step (insert_stmt); 988 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 989 - ; 990 - else 991 - { 992 - printf ("sqlite3_step() error: %s\n", 993 - sqlite3_errmsg (params->db_handle)); 994 - goto error; 995 - } 996 - 997 - /* inserting the Node (to) */ 998 - sqlite3_reset (insert_stmt); 999 - sqlite3_clear_bindings (insert_stmt); 1000 - sqlite3_bind_int64 (insert_stmt, 1, id2); 1001 - sqlite3_bind_blob (insert_stmt, 2, blob2, len2, SQLITE_STATIC); 1002 - ret = sqlite3_step (insert_stmt); 1003 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1004 - ; 1005 - else 1006 - { 1007 - printf ("sqlite3_step() error: %s\n", 1008 - sqlite3_errmsg (params->db_handle)); 1009 - goto error; 1010 - } 1011 - } 1012 - else 1013 - { 1014 - printf ("sqlite3_step() error: %s\n", 1015 - sqlite3_errmsg (params->db_handle)); 1016 - goto error; 1017 - } 1018 - } 1019 - 1020 - if (query_stmt != NULL) 1021 - sqlite3_finalize (query_stmt); 1022 - if (insert_stmt != NULL) 1023 - sqlite3_finalize (insert_stmt); 1024 - 1025 -/* committing the still pending SQL Transaction */ 1026 - ret = sqlite3_exec (params->db_handle, "COMMIT", NULL, NULL, &sql_err); 1027 - if (ret != SQLITE_OK) 1028 - { 1029 - fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 1030 - sqlite3_free (sql_err); 1031 - } 1032 -/* re-opening a Transaction */ 1033 - ret = sqlite3_exec (params->db_handle, "BEGIN", NULL, NULL, &sql_err); 1034 - if (ret != SQLITE_OK) 1035 - { 1036 - fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 1037 - sqlite3_free (sql_err); 1038 - return 0; 1039 - } 1040 - 1041 -/* re-querying Arcs */ 1042 - strcpy (sql, "SELECT node_from, node_to "); 1043 - sprintf (sql2, "FROM \"%s\"", table); 1044 - strcat (sql, sql2); 1045 - ret = sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 1046 - &query_stmt, NULL); 1047 - if (ret != SQLITE_OK) 1048 - { 1049 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 1050 - sqlite3_errmsg (params->db_handle)); 1051 - goto error; 1052 - } 1053 - 1054 -/* Updating Nodes */ 1055 - sprintf (sql, "UPDATE \"%s_nodes\" SET cardinality = (cardinality + 1) ", 1056 - table); 1057 - strcat (sql, "WHERE node_id = ?"); 1058 - ret = sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 1059 - &update_stmt, NULL); 1060 - if (ret != SQLITE_OK) 1061 - { 1062 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 1063 - sqlite3_errmsg (params->db_handle)); 1064 - goto error; 1065 - } 1066 - 1067 - while (1) 1068 - { 1069 - ret = sqlite3_step (query_stmt); 1070 - if (ret == SQLITE_DONE) 1071 - break; 1072 - if (ret == SQLITE_ROW) 1073 - { 1074 - sqlite3_int64 id1 = sqlite3_column_int64 (query_stmt, 0); 1075 - sqlite3_int64 id2 = sqlite3_column_int64 (query_stmt, 1); 1076 - 1077 - /* udating the Node (from) */ 1078 - sqlite3_reset (update_stmt); 1079 - sqlite3_clear_bindings (update_stmt); 1080 - sqlite3_bind_double (update_stmt, 1, id1); 1081 - ret = sqlite3_step (update_stmt); 1082 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1083 - ; 1084 - else 1085 - { 1086 - printf ("sqlite3_step() error: %s\n", 1087 - sqlite3_errmsg (params->db_handle)); 1088 - goto error; 1089 - } 1090 - 1091 - /* udating the Node (to) */ 1092 - sqlite3_reset (update_stmt); 1093 - sqlite3_clear_bindings (update_stmt); 1094 - sqlite3_bind_double (update_stmt, 1, id2); 1095 - ret = sqlite3_step (update_stmt); 1096 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1097 - ; 1098 - else 1099 - { 1100 - printf ("sqlite3_step() error: %s\n", 1101 - sqlite3_errmsg (params->db_handle)); 1102 - goto error; 1103 - } 1104 - } 1105 - else 1106 - { 1107 - printf ("sqlite3_step() error: %s\n", 1108 - sqlite3_errmsg (params->db_handle)); 1109 - goto error; 1110 - } 1111 - } 1112 - 1113 - if (query_stmt != NULL) 1114 - sqlite3_finalize (query_stmt); 1115 - if (update_stmt != NULL) 1116 - sqlite3_finalize (update_stmt); 1117 - 1118 -/* committing the still pending SQL Transaction */ 1119 - ret = sqlite3_exec (params->db_handle, "COMMIT", NULL, NULL, &sql_err); 1120 - if (ret != SQLITE_OK) 1121 - { 1122 - fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 1123 - sqlite3_free (sql_err); 1124 - } 1125 -/* re-opening a Transaction */ 1126 - ret = sqlite3_exec (params->db_handle, "BEGIN", NULL, NULL, &sql_err); 1127 - if (ret != SQLITE_OK) 1128 - { 1129 - fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 1130 - sqlite3_free (sql_err); 1131 - return 0; 1132 - } 1133 - 1134 -/* querying Nodes */ 1135 - strcpy (sql, "SELECT n.node_id, t.osm_id "); 1136 - sprintf (sql2, "FROM \"%s_nodes\" AS n ", table); 1137 - strcat (sql, sql2); 1138 - strcat (sql, "JOIN graph_nodes AS t ON ("); 1139 - strcat (sql, "ST_X(n.Geometry) = t.lon AND "); 1140 - strcat (sql, "ST_Y(n.Geometry) = t.lat)"); 1141 - ret = sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 1142 - &query_stmt, NULL); 1143 - if (ret != SQLITE_OK) 1144 - { 1145 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 1146 - sqlite3_errmsg (params->db_handle)); 1147 - goto error; 1148 - } 1149 - 1150 -/* Updating Nodes */ 1151 - sprintf (sql, "UPDATE \"%s_nodes\" SET osm_id = ? ", table); 1152 - strcat (sql, "WHERE node_id = ?"); 1153 - ret = sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 1154 - &update_stmt, NULL); 1155 - if (ret != SQLITE_OK) 1156 - { 1157 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 1158 - sqlite3_errmsg (params->db_handle)); 1159 - goto error; 1160 - } 1161 - 1162 - while (1) 1163 - { 1164 - ret = sqlite3_step (query_stmt); 1165 - if (ret == SQLITE_DONE) 1166 - break; 1167 - if (ret == SQLITE_ROW) 1168 - { 1169 - sqlite3_int64 id = sqlite3_column_int64 (query_stmt, 0); 1170 - sqlite3_int64 osm_id = sqlite3_column_int64 (query_stmt, 1); 1171 - 1172 - /* udating the Node OSM-ID */ 1173 - sqlite3_reset (update_stmt); 1174 - sqlite3_clear_bindings (update_stmt); 1175 - sqlite3_bind_int64 (update_stmt, 1, osm_id); 1176 - sqlite3_bind_int64 (update_stmt, 2, id); 1177 - ret = sqlite3_step (update_stmt); 1178 - if (ret == SQLITE_DONE || ret == SQLITE_ROW) 1179 - ; 1180 - else 1181 - { 1182 - printf ("sqlite3_step() error: %s\n", 1183 - sqlite3_errmsg (params->db_handle)); 1184 - goto error; 1185 - } 1186 - } 1187 - else 1188 - { 1189 - printf ("sqlite3_step() error: %s\n", 1190 - sqlite3_errmsg (params->db_handle)); 1191 - goto error; 1192 - } 1193 - } 1194 -/* committing the still pending SQL Transaction */ 1195 - ret = sqlite3_exec (params->db_handle, "COMMIT", NULL, NULL, &sql_err); 1196 - if (ret != SQLITE_OK) 1197 - { 1198 - fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 1199 - sqlite3_free (sql_err); 1200 - } 1201 - printf ("\tHelper table '%s_nodes' succesfully created\n", table); 1202 - return 1; 1203 - 1204 - error: 1205 - if (query_stmt != NULL) 1206 - sqlite3_finalize (query_stmt); 1207 - if (insert_stmt != NULL) 1208 - sqlite3_finalize (insert_stmt); 1209 - if (update_stmt != NULL) 1210 - sqlite3_finalize (update_stmt); 1211 - 1212 - ret = sqlite3_exec (params->db_handle, "ROLLBACK", NULL, NULL, &sql_err); 1213 - if (ret != SQLITE_OK) 1214 - { 1215 - fprintf (stderr, "ROLLBACK TRANSACTION error: %s\n", sql_err); 1216 - sqlite3_free (sql_err); 1217 - } 1218 - return 0; 2020 + return; 2021 + } 2022 + printf ("\tDropped index 'from_to'\n"); 1219 2023 } 1220 2024 1221 2025 static void 1222 -finalize_sql_stmts (struct aux_params *params) 2026 +db_vacuum (sqlite3 * handle) 1223 2027 { 1224 -/* memory cleanup - prepared statements */ 1225 2028 int ret; 1226 2029 char *sql_err = NULL; 1227 - 1228 - if (params->ins_tmp_nodes_stmt != NULL) 1229 - sqlite3_finalize (params->ins_tmp_nodes_stmt); 1230 - if (params->upd_tmp_nodes_stmt != NULL) 1231 - sqlite3_finalize (params->upd_tmp_nodes_stmt); 1232 - if (params->rd_tmp_nodes_stmt != NULL) 1233 - sqlite3_finalize (params->rd_tmp_nodes_stmt); 1234 - if (params->ins_arcs_stmt != NULL) 1235 - sqlite3_finalize (params->ins_arcs_stmt); 1236 - 1237 -/* committing the still pending SQL Transaction */ 1238 - ret = sqlite3_exec (params->db_handle, "COMMIT", NULL, NULL, &sql_err); 2030 +/* VACUUMing the DB */ 2031 + printf ("\nVACUUMing the DB ... wait please ...\n"); 2032 + ret = sqlite3_exec (handle, "VACUUM", NULL, NULL, &sql_err); 1239 2033 if (ret != SQLITE_OK) 1240 2034 { 1241 - fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 2035 + fprintf (stderr, "VACUUM error: %s\n", sql_err); 1242 2036 sqlite3_free (sql_err); 1243 2037 return; 1244 2038 } 1245 -} 1246 - 1247 -static void 1248 -create_sql_stmts (struct aux_params *params) 1249 -{ 1250 -/* creating prepared SQL statements */ 1251 - sqlite3_stmt *ins_tmp_nodes_stmt; 1252 - sqlite3_stmt *upd_tmp_nodes_stmt; 1253 - sqlite3_stmt *rd_tmp_nodes_stmt; 1254 - sqlite3_stmt *ins_arcs_stmt; 1255 - char sql[1024]; 1256 - int ret; 1257 - char *sql_err = NULL; 1258 - 1259 -/* the complete operation is handled as a unique SQL Transaction */ 1260 - ret = sqlite3_exec (params->db_handle, "BEGIN", NULL, NULL, &sql_err); 1261 - if (ret != SQLITE_OK) 1262 - { 1263 - fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 1264 - sqlite3_free (sql_err); 1265 - return; 1266 - } 1267 - strcpy (sql, "INSERT INTO osm_tmp_nodes (id, lat, lon, ref_count) "); 1268 - strcat (sql, "VALUES (?, ?, ?, 0)"); 1269 - ret = 1270 - sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 1271 - &ins_tmp_nodes_stmt, NULL); 1272 - if (ret != SQLITE_OK) 1273 - { 1274 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 1275 - sqlite3_errmsg (params->db_handle)); 1276 - finalize_sql_stmts (params); 1277 - return; 1278 - } 1279 - strcpy (sql, "UPDATE osm_tmp_nodes SET ref_count = (ref_count + 1) "); 1280 - strcat (sql, "WHERE id = ?"); 1281 - ret = 1282 - sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 1283 - &upd_tmp_nodes_stmt, NULL); 1284 - if (ret != SQLITE_OK) 1285 - { 1286 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 1287 - sqlite3_errmsg (params->db_handle)); 1288 - finalize_sql_stmts (params); 1289 - return; 1290 - } 1291 - strcpy (sql, "SELECT lon, lat, ref_count FROM osm_tmp_nodes "); 1292 - strcat (sql, "WHERE id = ?"); 1293 - ret = 1294 - sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 1295 - &rd_tmp_nodes_stmt, NULL); 1296 - if (ret != SQLITE_OK) 1297 - { 1298 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 1299 - sqlite3_errmsg (params->db_handle)); 1300 - finalize_sql_stmts (params); 1301 - return; 1302 - } 1303 - sprintf (sql, "INSERT INTO \"%s\" ", params->table); 1304 - strcat (sql, "(id, osm_id, node_from, node_to, class, "); 1305 - strcat (sql, 1306 - "name, oneway_fromto, oneway_tofrom, length, cost, geometry) "); 1307 - strcat (sql, "VALUES (NULL, ?, -1, -1, ?, ?, ?, ?, -1, -1, ?)"); 1308 - ret = 1309 - sqlite3_prepare_v2 (params->db_handle, sql, strlen (sql), 1310 - &ins_arcs_stmt, NULL); 1311 - if (ret != SQLITE_OK) 1312 - { 1313 - fprintf (stderr, "SQL error: %s\n%s\n", sql, 1314 - sqlite3_errmsg (params->db_handle)); 1315 - finalize_sql_stmts (params); 1316 - return; 1317 - } 1318 - 1319 - params->ins_tmp_nodes_stmt = ins_tmp_nodes_stmt; 1320 - params->upd_tmp_nodes_stmt = upd_tmp_nodes_stmt; 1321 - params->rd_tmp_nodes_stmt = rd_tmp_nodes_stmt; 1322 - params->ins_arcs_stmt = ins_arcs_stmt; 2039 + printf ("\tAll done: OSM graph was succesfully loaded\n"); 1323 2040 } 1324 2041 1325 2042 static void 1326 2043 spatialite_autocreate (sqlite3 * db) 1327 2044 { 1328 2045 /* attempting to perform self-initialization for a newly created DB */ 1329 2046 int ret; ................................................................................ 1475 2192 ; 1476 2193 else 1477 2194 goto unknown; 1478 2195 1479 2196 /* creating the OSM related tables */ 1480 2197 strcpy (sql, "CREATE TABLE osm_tmp_nodes (\n"); 1481 2198 strcat (sql, "id INTEGER NOT NULL PRIMARY KEY,\n"); 2199 + strcat (sql, "alias INTEGER NOT NULL,\n"); 1482 2200 strcat (sql, "lat DOUBLE NOT NULL,\n"); 1483 2201 strcat (sql, "lon DOUBLE NOT NULL,\n"); 1484 - strcat (sql, "ref_count INTEGER NOT NULL)\n"); 2202 + strcat (sql, "refcount INTEGER NOT NULL)\n"); 1485 2203 ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg); 1486 2204 if (ret != SQLITE_OK) 1487 2205 { 1488 2206 fprintf (stderr, "CREATE TABLE 'osm_tmp_nodes' error: %s\n", err_msg); 1489 2207 sqlite3_free (err_msg); 1490 - sqlite3_close (handle); 1491 - return NULL; 1492 - } 1493 -/* creating the GRAPH temporary nodes */ 1494 - strcpy (sql, "CREATE TABLE graph_nodes (\n"); 1495 - strcat (sql, "lon DOUBLE NOT NULL,\n"); 1496 - strcat (sql, "lat DOUBLE NOT NULL,\n"); 1497 - strcat (sql, "osm_id INTEGER,\n"); 1498 - strcat (sql, "CONSTRAINT pk_nodes PRIMARY KEY (lon, lat))\n"); 1499 - ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg); 1500 - if (ret != SQLITE_OK) 1501 - { 1502 - fprintf (stderr, "CREATE TABLE 'graph_nodes' error: %s\n", err_msg); 1503 - sqlite3_free (err_msg); 1504 2208 sqlite3_close (handle); 1505 2209 return NULL; 1506 2210 } 1507 2211 1508 2212 if (double_arcs) 1509 2213 { 1510 2214 /* unidirectional arcs */ ................................................................................ 1548 2252 if (ret != SQLITE_OK) 1549 2253 { 1550 2254 fprintf (stderr, "AddGeometryColumn() error: %s\n", err_msg); 1551 2255 sqlite3_free (err_msg); 1552 2256 sqlite3_close (handle); 1553 2257 return NULL; 1554 2258 } 2259 + 2260 + sprintf (sql, 2261 + "CREATE UNIQUE INDEX from_to ON \"%s\" (node_from, node_to, length, cost)", 2262 + table); 2263 + ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg); 2264 + if (ret != SQLITE_OK) 2265 + { 2266 + fprintf (stderr, "CREATE INDEX 'from_to' error: %s\n", err_msg); 2267 + sqlite3_free (err_msg); 2268 + sqlite3_close (handle); 2269 + return NULL; 2270 + } 1555 2271 1556 2272 return handle; 1557 2273 1558 2274 unknown: 1559 2275 if (handle) 1560 2276 sqlite3_close (handle); 1561 2277 fprintf (stderr, "DB '%s'\n", path); 1562 2278 fprintf (stderr, "doesn't seems to contain valid Spatial Metadata ...\n\n"); 1563 2279 fprintf (stderr, "Please, run the 'spatialite-init' SQL script \n"); 1564 2280 fprintf (stderr, "in order to initialize Spatial Metadata\n\n"); 1565 2281 return NULL; 1566 2282 } 1567 2283 1568 -static void 1569 -db_cleanup (sqlite3 * handle) 2284 +static int 2285 +check_osm_xml (FILE * xml) 1570 2286 { 1571 - int ret; 1572 - char *sql_err = NULL; 1573 -/* dropping the OSM_TMP_NODES table */ 1574 - printf ("\nDropping temporary table 'osm_tmp_nodes' ... wait please ...\n"); 1575 - ret = 1576 - sqlite3_exec (handle, "DROP TABLE osm_tmp_nodes", NULL, NULL, &sql_err); 1577 - if (ret != SQLITE_OK) 1578 - { 1579 - fprintf (stderr, "'DROP TABLE osm_tmp_nodes' error: %s\n", sql_err); 1580 - sqlite3_free (sql_err); 1581 - return; 1582 - } 1583 - printf ("\tDropped table 'osm_tmp_nodes'\n"); 1584 -/* dropping the GRAPH_NODES table */ 1585 - printf ("\nDropping temporary table 'graph_nodes' ... wait please ...\n"); 1586 - ret = sqlite3_exec (handle, "DROP TABLE graph_nodes", NULL, NULL, &sql_err); 1587 - if (ret != SQLITE_OK) 1588 - { 1589 - fprintf (stderr, "'DROP TABLE graph_nodes' error: %s\n", sql_err); 1590 - sqlite3_free (sql_err); 1591 - return; 1592 - } 1593 - printf ("\tDropped table 'graph_nodes'\n"); 1594 -} 1595 - 1596 -static void 1597 -db_vacuum (sqlite3 * handle) 1598 -{ 1599 - int ret; 1600 - char *sql_err = NULL; 1601 -/* VACUUMing the DB */ 1602 - printf ("\nVACUUMing the DB ... wait please ...\n"); 1603 - ret = sqlite3_exec (handle, "VACUUM", NULL, NULL, &sql_err); 1604 - if (ret != SQLITE_OK) 1605 - { 1606 - fprintf (stderr, "VACUUM error: %s\n", sql_err); 1607 - sqlite3_free (sql_err); 1608 - return; 1609 - } 1610 - printf ("\tAll done: OSM graph was succesfully loaded\n"); 1611 -} 1612 - 1613 -static int 1614 -parse_kv (char *line, const char **k, const char **v) 1615 -{ 1616 -/* splitting two tokens separated by a colon ':' */ 1617 - int i; 1618 - int cnt = 0; 1619 - int pos = -1; 1620 - int len = strlen (line); 1621 - for (i = 0; i < len; i++) 1622 - { 1623 - if (line[i] == ':') 1624 - { 1625 - /* delimiter found */ 1626 - cnt++; 1627 - pos = i; 1628 - } 1629 - } 1630 - if (cnt != 1) 1631 - { 1632 - /* illegal string */ 1633 - return 0; 1634 - } 1635 - line[pos] = '\0'; 1636 - *k = line; 1637 - *v = line + pos + 1; 1638 - return 1; 1639 -} 1640 - 1641 -static void 1642 -free_params (struct aux_params *params) 1643 -{ 1644 -/* memory cleanup - aux params linked lists */ 1645 - struct aux_speed *ps; 1646 - struct aux_speed *ps_n; 1647 - struct aux_class *pc; 1648 - struct aux_class *pc_n; 1649 - ps = params->first_speed; 1650 - while (ps) 1651 - { 1652 - ps_n = ps->next; 1653 - free (ps->class_name); 1654 - free (ps); 1655 - ps = ps_n; 1656 - } 1657 - params->first_speed = NULL; 1658 - params->last_speed = NULL; 1659 - pc = params->first_include; 1660 - while (pc) 1661 - { 1662 - pc_n = pc->next; 1663 - free (pc->class_name); 1664 - if (pc->sub_class != NULL) 1665 - free (pc->sub_class); 1666 - free (pc); 1667 - pc = pc_n; 1668 - } 1669 - params->first_include = NULL; 1670 - params->last_include = NULL; 1671 - pc = params->first_ignore; 1672 - while (pc) 1673 - { 1674 - pc_n = pc->next; 1675 - free (pc->class_name); 1676 - if (pc->sub_class != NULL) 1677 - free (pc->sub_class); 1678 - free (pc); 1679 - pc = pc_n; 1680 - } 1681 - params->first_ignore = NULL; 1682 - params->last_ignore = NULL; 1683 -} 1684 - 1685 -static void 1686 -add_speed_class (struct aux_params *params, const char *class, double speed) 1687 -{ 1688 -/* inserting a class speed into the linked list */ 1689 - int len = strlen (class); 1690 - struct aux_speed *p = malloc (sizeof (struct aux_speed)); 1691 - p->class_name = malloc (len + 1); 1692 - strcpy (p->class_name, class); 1693 - p->speed = speed; 1694 - p->next = NULL; 1695 - if (params->first_speed == NULL) 1696 - params->first_speed = p; 1697 - if (params->last_speed != NULL) 1698 - params->last_speed->next = p; 1699 - params->last_speed = p; 1700 -} 1701 - 1702 -static void 1703 -add_include_class (struct aux_params *params, const char *class, 1704 - const char *sub_class) 1705 -{ 1706 -/* inserting an Include class into the linked list */ 1707 - int len1 = strlen (class); 1708 - int len2 = strlen (sub_class); 1709 - struct aux_class *p = malloc (sizeof (struct aux_class)); 1710 - p->class_name = malloc (len1 + 1); 1711 - strcpy (p->class_name, class); 1712 - if (len2 == 0) 1713 - p->sub_class = NULL; 1714 - else 1715 - { 1716 - p->sub_class = malloc (len2 + 1); 1717 - strcpy (p->sub_class, sub_class); 1718 - } 1719 - p->next = NULL; 1720 - if (params->first_include == NULL) 1721 - params->first_include = p; 1722 - if (params->last_include != NULL) 1723 - params->last_include->next = p; 1724 - params->last_include = p; 1725 -} 1726 - 1727 -static void 1728 -add_ignore_class (struct aux_params *params, const char *class, 1729 - const char *sub_class) 1730 -{ 1731 -/* inserting an Ignore class into the linked list */ 1732 - int len1 = strlen (class); 1733 - int len2 = strlen (sub_class); 1734 - struct aux_class *p = malloc (sizeof (struct aux_class)); 1735 - p->class_name = malloc (len1 + 1); 1736 - strcpy (p->class_name, class); 1737 - p->sub_class = malloc (len2 + 1); 1738 - strcpy (p->sub_class, sub_class); 1739 - p->next = NULL; 1740 - if (params->first_ignore == NULL) 1741 - params->first_ignore = p; 1742 - if (params->last_ignore != NULL) 1743 - params->last_ignore->next = p; 1744 - params->last_ignore = p; 1745 -} 1746 - 1747 -static int 1748 -parse_template_line (struct aux_params *params, const char *line) 1749 -{ 1750 -/* parsing a template line */ 1751 - char clean[8192]; 1752 - char *out = clean; 1753 - const char *in = line; 1754 - int i; 1755 - 1756 - *out = '\0'; 1757 - while (1) 1758 - { 1759 - if (*in == '\0' || *in == '#') 1760 - { 1761 - *out = '\0'; 1762 - break; 1763 - } 1764 - *out++ = *in++; 1765 - } 1766 - for (i = (int) strlen (clean) - 1; i >= 0; i--) 1767 - { 1768 - /* cleaning any tralining space/tab */ 1769 - if (clean[i] == ' ' || clean[i] == '\t') 1770 - clean[i] = '\0'; 1771 - else 2287 +/* check if the file contains OSM XML */ 2288 + int xml_open = 0; 2289 + int xml_close = 0; 2290 + int osm_open = 0; 2291 + int osm_close = 0; 2292 + int ok_xml = 0; 2293 + int ok_osm = 0; 2294 + char tag[512]; 2295 + char *p; 2296 + int c; 2297 + int count = 0; 2298 + while ((c = getc (xml)) != EOF) 2299 + { 2300 + count++; 2301 + if (count > 512) 1772 2302 break; 1773 - } 1774 - if (*clean == '\0') 1775 - return 1; /* ignoring empty lines */ 1776 - if (strncmp (clean, "NodingStrategy:", 15) == 0) 1777 - { 1778 - if (strcmp (clean + 15, "way-ends") == 0) 1779 - { 1780 - params->noding_strategy = NODE_STRAT_ENDS; 1781 - return 1; 1782 - } 1783 - else if (strcmp (clean + 15, "none") == 0) 1784 - { 1785 - params->noding_strategy = NODE_STRAT_NONE; 1786 - return 1; 1787 - } 1788 - else if (strcmp (clean + 15, "all") == 0) 1789 - { 1790 - params->noding_strategy = NODE_STRAT_ALL; 1791 - return 1; 1792 - } 1793 - else 1794 - return 0; 1795 - } 1796 - else if (strncmp (clean, "OnewayStrategy:", 15) == 0) 1797 - { 1798 - if (strcmp (clean + 15, "full") == 0) 1799 - { 1800 - params->oneway_strategy = ONEWAY_STRAT_FULL; 1801 - return 1; 1802 - } 1803 - else if (strcmp (clean + 15, "none") == 0) 1804 - { 1805 - params->oneway_strategy = ONEWAY_STRAT_NONE; 1806 - return 1; 1807 - } 1808 - else if (strcmp (clean + 15, "ignore-roundabout") == 0) 1809 - { 1810 - params->oneway_strategy = ONEWAY_STRAT_NO_ROUND; 1811 - return 1; 1812 - } 1813 - else if (strcmp (clean + 15, "ignore-motorway") == 0) 1814 - { 1815 - params->oneway_strategy = ONEWAY_STRAT_NO_MOTOR; 1816 - return 1; 1817 - } 1818 - else if (strcmp (clean + 15, "ignore-both-roundabout-and-motorway") == 1819 - 0) 1820 - { 1821 - params->oneway_strategy = ONEWAY_STRAT_NO_BOTH; 1822 - return 1; 1823 - } 1824 - else 1825 - return 0; 1826 - } 1827 - else if (strncmp (clean, "ClassInclude:", 13) == 0) 1828 - { 1829 - const char *k; 1830 - const char *v; 1831 - if (parse_kv (clean + 13, &k, &v)) 1832 - { 1833 - if (strlen (k) > 0) 1834 - add_include_class (params, k, v); 1835 - return 1; 1836 - } 1837 - else 1838 - return 0; 1839 - } 1840 - else if (strncmp (clean, "ClassIgnore:", 12) == 0) 1841 - { 1842 - const char *k; 1843 - const char *v; 1844 - if (parse_kv (clean + 12, &k, &v)) 1845 - { 1846 - if (strlen (k) > 0 && strlen (v) > 0) 1847 - add_ignore_class (params, k, v); 1848 - return 1; 1849 - } 1850 - else 1851 - return 0; 1852 - } 1853 - else if (strncmp (clean, "SpeedClass:", 11) == 0) 1854 - { 1855 - const char *k; 1856 - const char *v; 1857 - if (parse_kv (clean + 11, &k, &v)) 1858 - { 1859 - if (*k == '\0') 1860 - params->default_speed = atof (v); 1861 - else 1862 - add_speed_class (params, k, atof (v)); 1863 - return 1; 1864 - } 1865 - else 1866 - return 0; 1867 - } 1868 -/* some illegal expression found */ 1869 - return 0; 1870 -} 1871 - 1872 -static int 1873 -parse_template (struct aux_params *params, const char *template_path) 1874 -{ 1875 -/* parsing a template-file */ 1876 - char line[8192]; 1877 - char *p = line; 1878 - int c; 1879 - int lineno = 0; 1880 - FILE *in = fopen (template_path, "rb"); 1881 - if (in == NULL) 1882 - { 1883 - fprintf (stderr, "Unable to open template-file \"%s\"\n", 1884 - template_path); 1885 - return 0; 1886 - } 1887 - 1888 - while ((c = getc (in)) != EOF) 1889 - { 1890 - 1891 - if (c == '\r') 1892 - continue; 1893 - if (c == '\n') 1894 - { 2303 + if (!xml_open && c == '<') 2304 + { 2305 + xml_open = 1; 2306 + p = tag; 2307 + *p = '\0'; 2308 + continue; 2309 + } 2310 + if (!osm_open && c == '<') 2311 + { 2312 + osm_open = 1; 2313 + p = tag; 2314 + *p = '\0'; 2315 + continue; 2316 + } 2317 + if (!xml_close && c == '>') 2318 + { 2319 + xml_close = 1; 2320 + *p = '\0'; 2321 + if (strncmp (tag, "?xml", 4) == 0) 2322 + ok_xml = 1; 2323 + continue; 2324 + } 2325 + if (!osm_close && c == '>') 2326 + { 2327 + osm_close = 1; 1895 2328 *p = '\0'; 1896 - lineno++; 1897 - if (!parse_template_line (params, line)) 1898 - { 1899 - fprintf (stderr, 1900 - "Template-file \"%s\"\nParsing error on line %d\n\n", 1901 - template_path, lineno); 1902 - free_params (params); 1903 - return 0; 1904 - } 1905 - p = line; 1906 - continue; 1907 - } 1908 - *p++ = c; 1909 - } 1910 - 1911 - fclose (in); 1912 - return 1; 1913 -} 1914 - 1915 -static int 1916 -print_template (const char *template_path, int railways) 1917 -{ 1918 -/* printing a default template-file */ 1919 - FILE *out = fopen (template_path, "w"); 1920 - if (out == NULL) 1921 - { 1922 - fprintf (stderr, "Unable to create template-file \"%s\"\n", 1923 - template_path); 1924 - return 0; 1925 - } 1926 - 1927 - fprintf (out, 1928 - "###############################################################\n"); 1929 - fprintf (out, "#\n"); 1930 - fprintf (out, "# the '#' char represents a comment marker:\n"); 1931 - fprintf (out, "# any text until the next new-line (NL) char will\n"); 1932 - fprintf (out, "# be ignored at all.\n"); 1933 - fprintf (out, "#\n\n"); 1934 - 1935 - fprintf (out, 1936 - "###############################################################\n"); 1937 - fprintf (out, "#\n"); 1938 - fprintf (out, "# NodingStrategy section\n"); 1939 - fprintf (out, "#\n"); 1940 - fprintf (out, "# - NodingStrategy:way-ends\n"); 1941 - fprintf (out, 1942 - "# any Way end-point (both extremities) is assumed to represent\n"); 1943 - fprintf (out, "# a Node into the Graph [network] to be built.\n"); 1944 - fprintf (out, "# - NodingStrategy:none\n"); 1945 - fprintf (out, 1946 - "# any Way is assumed to directly represent an Arc into the Graph\n"); 1947 - fprintf (out, 1948 - "# [network] to be built. No attempt to split and renode the\n"); 1949 - fprintf (out, "# Graph's Arcs will be performed.\n"); 1950 - fprintf (out, "# - NodingStrategy:all\n"); 1951 - fprintf (out, 1952 - "# any Way point is assumed to represent a Node into the Graph\n"); 1953 - fprintf (out, 1954 - "# [network] to be built, if it's shared by two or more Ways.\n"); 1955 - fprintf (out, "#\n\n"); 1956 - if (railways) 1957 - { 1958 - fprintf (out, "NodingStrategy:all # default value for Railway\n"); 1959 - fprintf (out, "# NodingStrategy:none\n"); 1960 - fprintf (out, "# NodingStrategy:way-ends\n\n\n"); 1961 - } 1962 - else 1963 - { 1964 - fprintf (out, "NodingStrategy:way-ends # default value\n"); 1965 - fprintf (out, "# NodingStrategy:none\n"); 1966 - fprintf (out, "# NodingStrategy:all\n\n\n"); 1967 - } 1968 - 1969 - fprintf (out, 1970 - "###############################################################\n"); 1971 - fprintf (out, "#\n"); 1972 - fprintf (out, "# OnewayStrategy section\n"); 1973 - fprintf (out, "#\n"); 1974 - fprintf (out, "# - OnewayStrategy:full\n"); 1975 - fprintf (out, 1976 - "# the following OSM tags will be assumed to identify oneways:\n"); 1977 - fprintf (out, 1978 - "# * oneway:1, oneway:true or oneway:yes [oneway, normal direction]\n"); 1979 - fprintf (out, 1980 - "# * oneway:-1 or oneway:reverse [oneway, reverse direction]\n"); 1981 - fprintf (out, 1982 - "# * junction:roundabout, highway:motorway or highway:motorway_link\n"); 1983 - fprintf (out, "# * [implicit oneway, normal direction]\n"); 1984 - fprintf (out, "# - OnewayStrategy:none\n"); 1985 - fprintf (out, 1986 - "# all Arcs will be assumed to be bidirectional (no oneway at all).\n"); 1987 - fprintf (out, "# - OnewayStrategy:ignore-roundabout\n"); 1988 - fprintf (out, 1989 - "# any junction:roundabout tag will not be assumed to mark an oneway.\n"); 1990 - fprintf (out, "# - OnewayStrategy:ignore-motorway\n"); 1991 - fprintf (out, 1992 - "# any highway:motorway or highway:motorway_link tag will not be \n"); 1993 - fprintf (out, "# assumed to mark an oneway.\n"); 1994 - fprintf (out, "# - OnewayStrategy:ignore-both-roundabout-and-motorway\n"); 1995 - fprintf (out, 1996 - "# any junction:roundabout, highway:motorway or highway:motorway_link\n"); 1997 - fprintf (out, "# tag will not be assumed to mark an oneway.\n"); 1998 - fprintf (out, "#\n\n"); 1999 - if (railways) 2000 - { 2001 - fprintf (out, "OnewayStrategy:none # default value for Railways\n"); 2002 - fprintf (out, "# OnewayStrategy:full\n"); 2003 - fprintf (out, "# OnewayStrategy:ignore-roundabout\n"); 2004 - fprintf (out, "# OnewayStrategy:ignore-motorway\n"); 2005 - fprintf (out, 2006 - "# OnewayStrategy:ignore-both-roundabout-and-motorway\n\n\n"); 2007 - } 2008 - else 2009 - { 2010 - fprintf (out, "OnewayStrategy:full # default value\n"); 2011 - fprintf (out, "# OnewayStrategy:none\n"); 2012 - fprintf (out, "# OnewayStrategy:ignore-roundabout\n"); 2013 - fprintf (out, "# OnewayStrategy:ignore-motorway\n"); 2014 - fprintf (out, 2015 - "# OnewayStrategy:ignore-both-roundabout-and-motorway\n\n\n"); 2016 - } 2017 - 2018 - fprintf (out, 2019 - "###############################################################\n"); 2020 - fprintf (out, "#\n"); 2021 - fprintf (out, "# ClassInclude section\n"); 2022 - fprintf (out, "#\n"); 2023 - fprintf (out, "# - tokens are delimited by colons ':'\n"); 2024 - fprintf (out, 2025 - "# - the second and third tokens represents a Class-name tag\n"); 2026 - fprintf (out, 2027 - "# identifying the Arcs of the Graph: i.e. any Way exposing\n"); 2028 - fprintf (out, "# this tag will be processed.\n"); 2029 - fprintf (out, 2030 - "# - special case: suppressing the third token selects any\n"); 2031 - fprintf (out, "# generic main-class tag to be processed\n"); 2032 - fprintf (out, "#\n\n"); 2033 - if (railways) 2034 - fprintf (out, 2035 - "ClassInclude:railway:rail # default value for Railways\n\n\n"); 2036 - else 2037 - fprintf (out, 2038 - "ClassInclude:highway: # default value (all kind of highway)\n\n\n"); 2039 - 2040 - fprintf (out, 2041 - "###############################################################\n"); 2042 - fprintf (out, "#\n"); 2043 - fprintf (out, "# ClassIgnore section\n"); 2044 - fprintf (out, "#\n"); 2045 - fprintf (out, "# - tokens are delimited by colons ':'\n"); 2046 - fprintf (out, 2047 - "# - the second and third tokens represents a Class-name tag\n"); 2048 - fprintf (out, "# identifying Ways to be completely ignored.\n"); 2049 - fprintf (out, "#\n\n"); 2050 - if (railways) 2051 - fprintf (out, "# none for Railways\n\n\n"); 2052 - else 2053 - { 2054 - fprintf (out, "ClassIgnore:highway:pedestrian\n"); 2055 - fprintf (out, "ClassIgnore:highway:track\n"); 2056 - fprintf (out, "ClassIgnore:highway:services\n"); 2057 - fprintf (out, "ClassIgnore:highway:bus_guideway\n"); 2058 - fprintf (out, "ClassIgnore:highway:path\n"); 2059 - fprintf (out, "ClassIgnore:highway:cycleway\n"); 2060 - fprintf (out, "ClassIgnore:highway:footway\n"); 2061 - fprintf (out, "ClassIgnore:highway:byway\n"); 2062 - fprintf (out, "ClassIgnore:highway:steps\n\n\n"); 2063 - } 2064 - 2065 - fprintf (out, 2066 - "###############################################################\n"); 2067 - fprintf (out, "#\n"); 2068 - fprintf (out, "# SpeedClass section\n"); 2069 - fprintf (out, "#\n"); 2070 - fprintf (out, "# - tokens are delimited by colons ':'\n"); 2071 - fprintf (out, "# - the second token represents the Road Class-name\n"); 2072 - fprintf (out, "# [no name, i.e. '::' identifies the defaul value\n"); 2073 - fprintf (out, "# to be applied when no specific class match is found]\n"); 2074 - fprintf (out, "# - the third token represents the corresponding speed\n"); 2075 - fprintf (out, "# [expressed in Km/h]\n"); 2076 - fprintf (out, "#\n\n"); 2077 - if (railways) 2078 - fprintf (out, "SpeedClass:rail:60.0\n\n\n"); 2079 - else 2080 - { 2081 - fprintf (out, "SpeedClass::30.0 # default value\n"); 2082 - fprintf (out, "SpeedClass:motorway:110.0\n"); 2083 - fprintf (out, "SpeedClass:trunk:110.0\n"); 2084 - fprintf (out, "SpeedClass:primary:90.0\n"); 2085 - fprintf (out, "SpeedClass:secondary:70.0\n"); 2086 - fprintf (out, "SpeedClass:tertiary:50.0\n"); 2087 - fprintf (out, "# SpeedClass:yet_anotherclass_1:1.0\n"); 2088 - fprintf (out, "# SpeedClass:yet_anotherclass_2:2.0\n"); 2089 - fprintf (out, "# SpeedClass:yet_anotherclass_3:3.0\n\n\n"); 2090 - } 2091 - 2092 - fclose (out); 2093 - return 1; 2329 + if (strncmp (tag, "osm", 3) == 0) 2330 + ok_osm = 1; 2331 + continue; 2332 + } 2333 + if (xml_open && !xml_close) 2334 + *p++ = c; 2335 + if (osm_open && !osm_close) 2336 + *p++ = c; 2337 + } 2338 + if (ok_xml && ok_osm) 2339 + return 1; 2340 + return 0; 2094 2341 } 2095 2342 2096 2343 static void 2097 2344 do_help () 2098 2345 { 2099 2346 /* printing the argument list */ 2100 2347 fprintf (stderr, "\n\nusage: spatialite_osm_net ARGLIST\n"); 2101 2348 fprintf (stderr, 2102 2349 "==============================================================\n"); 2103 2350 fprintf (stderr, 2104 2351 "-h or --help print this help message\n"); 2105 2352 fprintf (stderr, "-o or --osm-path pathname the OSM-XML file path\n"); 2106 2353 fprintf (stderr, 2107 - " both OSM-XML (*.osm) and OSM-ProtoBuf\n"); 2108 - fprintf (stderr, 2109 - " (*.osm.pbf) are indifferenctly supported.\n\n"); 2110 - fprintf (stderr, 2111 2354 "-d or --db-path pathname the SpatiaLite DB path\n"); 2112 2355 fprintf (stderr, 2113 2356 "-T or --table table_name the db table to be feeded\n\n"); 2114 2357 fprintf (stderr, "you can specify the following options as well\n"); 2115 2358 fprintf (stderr, 2116 2359 "-cs or --cache-size num DB cache size (how many pages)\n"); 2117 2360 fprintf (stderr, ................................................................................ 2118 2361 "-m or --in-memory using IN-MEMORY database\n"); 2119 2362 fprintf (stderr, "-2 or --undirectional double arcs\n\n"); 2120 2363 fprintf (stderr, 2121 2364 "--roads extract roads [default]\n"); 2122 2365 fprintf (stderr, "--railways extract railways\n"); 2123 2366 fprintf (stderr, 2124 2367 " [mutually exclusive]\n\n"); 2125 - fprintf (stderr, "template-file specific options:\n"); 2126 - fprintf (stderr, 2127 - "-ot or --out-template path creates a default template-file\n"); 2128 - fprintf (stderr, 2129 - "-tf or --template-file path using a template-file\n\n"); 2130 2368 } 2131 2369 2132 2370 int 2133 2371 main (int argc, char *argv[]) 2134 2372 { 2135 2373 /* the MAIN function simply perform arguments checking */ 2136 2374 int i; ................................................................................ 2138 2376 const char *osm_path = NULL; 2139 2377 const char *db_path = NULL; 2140 2378 const char *table = NULL; 2141 2379 int in_memory = 0; 2142 2380 int cache_size = 0; 2143 2381 int double_arcs = 0; 2144 2382 int railways = 0; 2145 - int out_template = 0; 2146 - int use_template = 0; 2147 - const char *template_path = NULL; 2148 2383 int error = 0; 2149 2384 sqlite3 *handle; 2150 - struct aux_params params; 2151 - const void *osm_handle; 2152 - 2153 -/* initializing the aux-struct */ 2154 - params.db_handle = NULL; 2155 - params.ins_tmp_nodes_stmt = NULL; 2156 - params.upd_tmp_nodes_stmt = NULL; 2157 - params.rd_tmp_nodes_stmt = NULL; 2158 - params.ins_arcs_stmt = NULL; 2159 - params.noding_strategy = NODE_STRAT_ENDS; 2160 - params.oneway_strategy = ONEWAY_STRAT_FULL; 2161 - params.default_speed = 30.0; 2162 - params.first_speed = NULL; 2163 - params.last_speed = NULL; 2164 - params.first_include = NULL; 2165 - params.last_include = NULL; 2166 - params.first_ignore = NULL; 2167 - params.last_ignore = NULL; 2168 - 2385 + FILE *xml; 2386 + int nodes; 2387 + int ways; 2388 + char *big_buffer; 2169 2389 for (i = 1; i < argc; i++) 2170 2390 { 2171 2391 /* parsing the invocation arguments */ 2172 2392 if (next_arg != ARG_NONE) 2173 2393 { 2174 2394 switch (next_arg) 2175 2395 { ................................................................................ 2178 2398 break; 2179 2399 case ARG_DB_PATH: 2180 2400 db_path = argv[i]; 2181 2401 break; 2182 2402 case ARG_TABLE: 2183 2403 table = argv[i]; 2184 2404 break; 2185 - case ARG_TEMPLATE_PATH: 2186 - template_path = argv[i]; 2187 - break; 2188 2405 case ARG_CACHE_SIZE: 2189 2406 cache_size = atoi (argv[i]); 2190 2407 break; 2191 2408 }; 2192 2409 next_arg = ARG_NONE; 2193 2410 continue; 2194 2411 } ................................................................................ 2230 2447 } 2231 2448 if (strcasecmp (argv[i], "--cache-size") == 0 2232 2449 || strcmp (argv[i], "-cs") == 0) 2233 2450 { 2234 2451 next_arg = ARG_CACHE_SIZE; 2235 2452 continue; 2236 2453 } 2237 - if (strcmp (argv[i], "-ot") == 0) 2238 - { 2239 - out_template = 1; 2240 - use_template = 0; 2241 - next_arg = ARG_TEMPLATE_PATH; 2242 - continue; 2243 - } 2244 - if (strcasecmp (argv[i], "--out-template") == 0) 2245 - { 2246 - out_template = 1; 2247 - use_template = 0; 2248 - next_arg = ARG_TEMPLATE_PATH; 2249 - continue; 2250 - } 2251 - if (strcmp (argv[i], "-tf") == 0) 2252 - { 2253 - out_template = 0; 2254 - use_template = 1; 2255 - next_arg = ARG_TEMPLATE_PATH; 2256 - continue; 2257 - } 2258 - if (strcasecmp (argv[i], "--template-file") == 0) 2259 - { 2260 - out_template = 0; 2261 - use_template = 1; 2262 - next_arg = ARG_TEMPLATE_PATH; 2263 - continue; 2264 - } 2265 2454 if (strcasecmp (argv[i], "-m") == 0) 2266 2455 { 2267 2456 in_memory = 1; 2268 2457 next_arg = ARG_NONE; 2269 2458 continue; 2270 2459 } 2271 2460 if (strcasecmp (argv[i], "--in-memory") == 0) ................................................................................ 2303 2492 } 2304 2493 if (error) 2305 2494 { 2306 2495 do_help (); 2307 2496 return -1; 2308 2497 } 2309 2498 /* checking the arguments */ 2310 - if (out_template) 2311 - { 2312 - /* if out-template is set this one the unique option to be honored */ 2313 - if (!template_path) 2314 - { 2315 - fprintf (stderr, 2316 - "did you forget setting the --out-template path argument ?\n"); 2317 - error = 1; 2318 - } 2319 - if (print_template (template_path, railways)) 2320 - printf ("template-file \"%s\" succesfully created\n\n", 2321 - template_path); 2322 - return 0; 2323 - } 2324 2499 if (!osm_path) 2325 2500 { 2326 2501 fprintf (stderr, 2327 2502 "did you forget setting the --osm-path argument ?\n"); 2328 2503 error = 1; 2329 2504 } 2330 2505 if (!db_path) ................................................................................ 2333 2508 error = 1; 2334 2509 } 2335 2510 if (!table) 2336 2511 { 2337 2512 fprintf (stderr, "did you forget setting the --table argument ?\n"); 2338 2513 error = 1; 2339 2514 } 2340 - if (railways) 2341 - { 2342 - /* Railways default settings */ 2343 - params.noding_strategy = NODE_STRAT_ALL; 2344 - params.oneway_strategy = ONEWAY_STRAT_NONE; 2345 - params.default_speed = 60.0; 2346 - } 2347 - if (use_template) 2348 - { 2349 - /* use-template is set */ 2350 - if (!template_path) 2351 - { 2352 - fprintf (stderr, 2353 - "did you forget setting the --template-file path argument ?\n"); 2354 - error = 1; 2355 - } 2356 - if (parse_template (¶ms, template_path)) 2357 - printf ("template-file \"%s\" succesfully acquired\n\n", 2358 - template_path); 2359 - else 2360 - return -1; 2361 - } 2362 2515 if (error) 2363 2516 { 2364 2517 do_help (); 2365 - free_params (¶ms); 2518 + return -1; 2519 + } 2520 +/* opening the OSM-XML file */ 2521 + xml = fopen (osm_path, "rb"); 2522 + if (!xml) 2523 + { 2524 + fprintf (stderr, "cannot open %s\n", osm_path); 2525 + return -1; 2526 + } 2527 +/* checking if really is OSM XML */ 2528 + if (!check_osm_xml (xml)) 2529 + { 2530 + fprintf (stderr, "'%s' doesn't seems to contain OSM XML !!!\n", 2531 + osm_path); 2366 2532 return -1; 2367 2533 } 2368 - 2534 +/* repositioning XML from beginning */ 2535 + rewind (xml); 2369 2536 /* opening the DB */ 2370 2537 if (in_memory) 2371 2538 cache_size = 0; 2372 2539 handle = open_db (db_path, table, double_arcs, cache_size); 2373 2540 if (!handle) 2374 - { 2375 - free_params (¶ms); 2376 - return -1; 2377 - } 2541 + return -1; 2378 2542 if (in_memory) 2379 2543 { 2380 2544 /* loading the DB in-memory */ 2381 2545 sqlite3 *mem_handle; 2382 2546 sqlite3_backup *backup; 2383 2547 int ret; 2384 2548 ret = ................................................................................ 2386 2550 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 2387 2551 NULL); 2388 2552 if (ret != SQLITE_OK) 2389 2553 { 2390 2554 fprintf (stderr, "cannot open 'MEMORY-DB': %s\n", 2391 2555 sqlite3_errmsg (mem_handle)); 2392 2556 sqlite3_close (mem_handle); 2393 - free_params (¶ms); 2394 2557 return -1; 2395 2558 } 2396 2559 backup = sqlite3_backup_init (mem_handle, "main", handle, "main"); 2397 2560 if (!backup) 2398 2561 { 2399 2562 fprintf (stderr, "cannot load 'MEMORY-DB'\n"); 2400 2563 sqlite3_close (handle); 2401 2564 sqlite3_close (mem_handle); 2402 - free_params (¶ms); 2403 2565 return -1; 2404 2566 } 2405 2567 while (1) 2406 2568 { 2407 2569 ret = sqlite3_backup_step (backup, 1024); 2408 2570 if (ret == SQLITE_DONE) 2409 2571 break; 2410 2572 } 2411 2573 ret = sqlite3_backup_finish (backup); 2412 2574 sqlite3_close (handle); 2413 2575 handle = mem_handle; 2414 2576 printf ("\nusing IN-MEMORY database\n"); 2415 2577 } 2416 - params.db_handle = handle; 2417 - params.table = table; 2418 - if (use_template == 0) 2578 +/* extracting <node> tags form XML file */ 2579 + printf ("\nLoading OSM nodes ... wait please ...\n"); 2580 + nodes = parse_nodes (xml, handle); 2581 + if (nodes < 0) 2582 + { 2583 + fclose (xml); 2584 + sqlite3_close (handle); 2585 + fprintf (stderr, "Sorry, I'm quitting ... UNRECOVERABLE ERROR\n"); 2586 + return 1; 2587 + } 2588 + printf ("\tLoaded %d OSM nodes\n", nodes); 2589 +/* repositioning XML from beginning */ 2590 + rewind (xml); 2591 +/* extracting <way> tags form XML file - Pass I */ 2592 + printf ("\nVerifying OSM ways ... wait please ...\n"); 2593 + big_buffer = malloc (4 * 1024 * 1024); 2594 + ways = parse_ways_pass_1 (xml, handle, big_buffer, railways); 2595 + free (big_buffer); 2596 + if (ways < 0) 2597 + { 2598 + fclose (xml); 2599 + sqlite3_close (handle); 2600 + fprintf (stderr, "Sorry, I'm quitting ... UNRECOVERABLE ERROR\n"); 2601 + return 1; 2602 + } 2603 + printf ("\tVerified %d OSM ways\n", ways); 2604 +/* disambiguating nodes - oh yes, there lots of stupid duplicates using different IDs !!! */ 2605 + printf ("\nDisambiguating OSM nodes ... wait please ...\n"); 2606 + nodes = disambiguate_nodes (handle); 2607 + if (nodes < 0) 2419 2608 { 2420 - /* not using template: setting default params */ 2421 - if (railways == 1) 2422 - add_include_class (¶ms, "railway", "rail"); 2423 - else 2424 - add_include_class (¶ms, "highway", ""); 2425 - if (railways == 0) 2426 - { 2427 - /* setting default Road Ignore classes */ 2428 - add_ignore_class (¶ms, "highway", "pedestrian"); 2429 - add_ignore_class (¶ms, "highway", "track"); 2430 - add_ignore_class (¶ms, "highway", "services"); 2431 - add_ignore_class (¶ms, "highway", "bus_guideway"); 2432 - add_ignore_class (¶ms, "highway", "path"); 2433 - add_ignore_class (¶ms, "highway", "cycleway"); 2434 - add_ignore_class (¶ms, "highway", "footway"); 2435 - add_ignore_class (¶ms, "highway", "bridleway"); 2436 - add_ignore_class (¶ms, "highway", "byway"); 2437 - add_ignore_class (¶ms, "highway", "steps"); 2438 - } 2439 - if (railways == 0) 2440 - { 2441 - /* setting default Road Speeds */ 2442 - add_speed_class (¶ms, "motorway", 110.0); 2443 - add_speed_class (¶ms, "trunk", 110.0); 2444 - add_speed_class (¶ms, "primary", 90.0); 2445 - add_speed_class (¶ms, "secondary", 70.0); 2446 - add_speed_class (¶ms, "tertiary", 50.0); 2447 - } 2609 + fclose (xml); 2610 + sqlite3_close (handle); 2611 + fprintf (stderr, "Sorry, I'm quitting ... UNRECOVERABLE ERROR\n"); 2612 + return 1; 2448 2613 } 2449 - 2450 -/* creating SQL prepared statements */ 2451 - create_sql_stmts (¶ms); 2614 + if (nodes == 0) 2615 + printf ("\tNo duplicate OSM nodes found - fine ...\n"); 2616 + else 2617 + printf ("\tFound %d duplicate OSM nodes - fixed !!!\n", nodes); 2618 +/* repositioning XML from beginning */ 2619 + rewind (xml); 2620 +/* extracting <way> tags form XML file - Pass II */ 2621 + printf ("\nLoading network ARCs ... wait please ...\n"); 2622 + big_buffer = malloc (4 * 1024 * 1024); 2623 + ways = 2624 + parse_ways_pass_2 (xml, handle, table, double_arcs, big_buffer, 2625 + railways); 2452 2626 2453 - printf ("\nParsing input: Pass 1 [Nodes and Ways] ...\n"); 2454 -/* parsing the input OSM-file [Pass 1] */ 2455 - if (readosm_open (osm_path, &osm_handle) != READOSM_OK) 2627 + if (ways < 0) 2456 2628 { 2457 - fprintf (stderr, "cannot open %s\n", osm_path); 2458 - finalize_sql_stmts (¶ms); 2629 + fclose (xml); 2459 2630 sqlite3_close (handle); 2460 - readosm_close (osm_handle); 2461 - free_params (¶ms); 2462 - return -1; 2463 - } 2464 - if (readosm_parse (osm_handle, ¶ms, consume_node, consume_way_1, NULL) 2465 - != READOSM_OK) 2466 - { 2467 - fprintf (stderr, "unrecoverable error while parsing %s\n", osm_path); 2468 - finalize_sql_stmts (¶ms); 2469 - sqlite3_close (handle); 2470 - readosm_close (osm_handle); 2471 - free_params (¶ms); 2472 - return -1; 2631 + fprintf (stderr, "Sorry, I'm quitting ... UNRECOVERABLE ERROR\n"); 2632 + return 1; 2473 2633 } 2474 - readosm_close (osm_handle); 2475 - 2476 - printf ("Parsing input: Pass 2 [Arcs of the Graph] ...\n"); 2477 -/* parsing the input OSM-file [Pass 2] */ 2478 - if (readosm_open (osm_path, &osm_handle) != READOSM_OK) 2479 - { 2480 - fprintf (stderr, "cannot open %s\n", osm_path); 2481 - finalize_sql_stmts (¶ms); 2482 - sqlite3_close (handle); 2483 - readosm_close (osm_handle); 2484 - free_params (¶ms); 2485 - return -1; 2486 - } 2487 - if (readosm_parse (osm_handle, ¶ms, NULL, consume_way_2, NULL) != 2488 - READOSM_OK) 2489 - { 2490 - fprintf (stderr, "unrecoverable error while parsing %s\n", osm_path); 2491 - finalize_sql_stmts (¶ms); 2492 - sqlite3_close (handle); 2493 - readosm_close (osm_handle); 2494 - free_params (¶ms); 2495 - return -1; 2496 - } 2497 - readosm_close (osm_handle); 2498 - 2499 -/* finalizing SQL prepared statements */ 2500 - finalize_sql_stmts (¶ms); 2501 - 2502 -/* populating the GRAPH_NODES table */ 2503 - if (!populate_graph_nodes (handle, table)) 2504 - { 2505 - fprintf (stderr, 2506 - "unrecoverable error while extracting GRAPH_NODES\n"); 2507 - sqlite3_close (handle); 2508 - goto quit; 2509 - } 2510 - 2511 -/* assigning NodeIds to Arcs */ 2512 - if (!set_node_ids (handle, table)) 2513 - { 2514 - fprintf (stderr, 2515 - "unrecoverable error while assignign NODE-IDs to Arcs\n"); 2516 - sqlite3_close (handle); 2517 - goto quit; 2518 - } 2519 - 2520 -/* computing Length and Cost for each Arc */ 2521 - if (!set_lengths_costs (¶ms, table)) 2522 - { 2523 - fprintf (stderr, 2524 - "unrecoverable error while assignign Length and Cost to Arcs\n"); 2525 - sqlite3_close (handle); 2526 - goto quit; 2527 - } 2528 - 2529 -/* extracting qualified Nodes */ 2530 - if (!create_qualified_nodes (¶ms, table)) 2531 - { 2532 - fprintf (stderr, 2533 - "unrecoverable error while extracting qualified Nodes\n"); 2534 - sqlite3_close (handle); 2535 - goto quit; 2536 - } 2537 - 2538 - quit: 2539 -/* dropping the temporary tables */ 2634 + printf ("\tLoaded %d network ARCs\n", ways); 2635 + fclose (xml); 2636 +/* dropping the OSM_TMP_NODES table */ 2540 2637 db_cleanup (handle); 2541 - 2542 2638 if (in_memory) 2543 2639 { 2544 2640 /* exporting the in-memory DB to filesystem */ 2545 2641 sqlite3 *disk_handle; 2546 2642 sqlite3_backup *backup; 2547 2643 int ret; 2548 2644 printf ("\nexporting IN_MEMORY database ... wait please ...\n"); ................................................................................ 2551 2647 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 2552 2648 NULL); 2553 2649 if (ret != SQLITE_OK) 2554 2650 { 2555 2651 fprintf (stderr, "cannot open '%s': %s\n", db_path, 2556 2652 sqlite3_errmsg (disk_handle)); 2557 2653 sqlite3_close (disk_handle); 2558 - free_params (¶ms); 2559 2654 return -1; 2560 2655 } 2561 2656 backup = sqlite3_backup_init (disk_handle, "main", handle, "main"); 2562 2657 if (!backup) 2563 2658 { 2564 2659 fprintf (stderr, "Backup failure: 'MEMORY-DB' wasn't saved\n"); 2565 2660 sqlite3_close (handle); 2566 2661 sqlite3_close (disk_handle); 2567 - free_params (¶ms); 2568 2662 return -1; 2569 2663 } 2570 2664 while (1) 2571 2665 { 2572 2666 ret = sqlite3_backup_step (backup, 1024); 2573 2667 if (ret == SQLITE_DONE) 2574 2668 break; ................................................................................ 2577 2671 sqlite3_close (handle); 2578 2672 handle = disk_handle; 2579 2673 printf ("\tIN_MEMORY database succesfully exported\n"); 2580 2674 } 2581 2675 /* VACUUMing */ 2582 2676 db_vacuum (handle); 2583 2677 sqlite3_close (handle); 2584 - free_params (¶ms); 2585 2678 return 0; 2586 2679 }
Changes to spatialite_osm_raw.c.
1 1 /* 2 2 / spatialite_osm_raw 3 3 / 4 -/ a tool loading "raw" OSM maps into a SpatiaLite DB 4 +/ a tool loading "raw" OSM-XML maps into a SpatiaLite DB 5 5 / 6 6 / version 1.0, 2010 September 13 7 7 / 8 8 / Author: Sandro Furieri a.furieri@lqt.it 9 9 / 10 10 / Copyright (C) 2010 Alessandro Furieri 11 11 / ................................................................................ 29 29 #include <sys/types.h> 30 30 #endif 31 31 32 32 #include <stdlib.h> 33 33 #include <stdio.h> 34 34 #include <string.h> 35 35 #include <float.h> 36 + 37 +#include <expat.h> 36 38 37 39 #include "config.h" 38 40 39 41 #ifdef SPATIALITE_AMALGAMATION 40 42 #include <spatialite/sqlite3.h> 41 43 #else 42 44 #include <sqlite3.h> 43 45 #endif 44 46 45 47 #include <spatialite/gaiageo.h> 46 48 #include <spatialite.h> 47 -#include <readosm.h> 48 49 49 50 #define ARG_NONE 0 50 51 #define ARG_OSM_PATH 1 51 52 #define ARG_DB_PATH 2 52 53 #define ARG_CACHE_SIZE 3 53 54 55 +#define MAX_TAG 16 56 + 57 +#if defined(_WIN32) && !defined(__MINGW32__) 58 +#define strcasecmp _stricmp 59 +#endif /* not WIN32 */ 60 + 61 +#if defined(_WIN32) 62 +#define atol_64 _atoi64 63 +#else 64 +#define atol_64 atoll 65 +#endif 66 + 67 +#define BUFFSIZE 8192 68 + 69 +#define CURRENT_TAG_UNKNOWN 0 70 +#define CURRENT_TAG_IS_NODE 1 71 +#define CURRENT_TAG_IS_WAY 2 72 +#define CURRENT_TAG_IS_RELATION 3 73 + 54 74 struct aux_params 55 75 { 56 76 /* an auxiliary struct used for XML parsing */ 57 77 sqlite3 *db_handle; 58 78 sqlite3_stmt *ins_nodes_stmt; 59 79 sqlite3_stmt *ins_node_tags_stmt; 60 80 sqlite3_stmt *ins_ways_stmt; ................................................................................ 67 87 int wr_node_tags; 68 88 int wr_ways; 69 89 int wr_way_tags; 70 90 int wr_way_refs; 71 91 int wr_relations; 72 92 int wr_rel_tags; 73 93 int wr_rel_refs; 94 + int current_tag; 95 +}; 96 + 97 +struct tag 98 +{ 99 + char *k; 100 + char *v; 101 + struct tag *next; 102 +}; 103 + 104 +struct node 105 +{ 106 + sqlite3_int64 id; 107 + sqlite3_int64 version; 108 + char *timestamp; 109 + sqlite3_int64 uid; 110 + char *user; 111 + sqlite3_int64 changeset; 112 + double lat; 113 + double lon; 114 + struct tag *first; 115 + struct tag *last; 116 +} glob_node; 117 + 118 +struct node_ref 119 +{ 120 + sqlite3_int64 node_id; 121 + char *role; 122 + struct node_ref *next; 123 +}; 124 + 125 +struct way 126 +{ 127 + sqlite3_int64 id; 128 + sqlite3_int64 version; 129 + char *timestamp; 130 + sqlite3_int64 uid; 131 + char *user; 132 + sqlite3_int64 changeset; 133 + struct tag *first; 134 + struct tag *last; 135 + struct node_ref *first_node; 136 + struct node_ref *last_node; 137 +} glob_way; 138 + 139 +struct multi_ref 140 +{ 141 + sqlite3_int64 id; 142 + char type; 143 + char *role; 144 + struct multi_ref *next; 74 145 }; 75 146 76 -static int 77 -insert_node (struct aux_params *params, const readosm_node * node) 147 +struct relation 148 +{ 149 + sqlite3_int64 id; 150 + sqlite3_int64 version; 151 + char *timestamp; 152 + sqlite3_int64 uid; 153 + char *user; 154 + sqlite3_int64 changeset; 155 + struct tag *first; 156 + struct tag *last; 157 + struct multi_ref *first_rel; 158 + struct multi_ref *last_rel; 159 +} glob_relation; 160 + 161 +static void 162 +insert_node (struct aux_params *params) 78 163 { 79 164 int ret; 80 165 unsigned char *blob; 81 166 int blob_size; 82 - int i_tag; 83 - const readosm_tag *p_tag; 84 - gaiaGeomCollPtr geom = NULL; 85 - if (node->longitude != READOSM_UNDEFINED 86 - && node->latitude != READOSM_UNDEFINED) 87 - { 88 - geom = gaiaAllocGeomColl (); 89 - geom->Srid = 4326; 90 - gaiaAddPointToGeomColl (geom, node->longitude, node->latitude); 91 - } 167 + int sub = 0; 168 + struct tag *p_tag; 169 + gaiaGeomCollPtr geom = gaiaAllocGeomColl (); 170 + geom->Srid = 4326; 171 + gaiaAddPointToGeomColl (geom, glob_node.lon, glob_node.lat); 92 172 sqlite3_reset (params->ins_nodes_stmt); 93 173 sqlite3_clear_bindings (params->ins_nodes_stmt); 94 - sqlite3_bind_int64 (params->ins_nodes_stmt, 1, node->id); 95 - if (node->version == READOSM_UNDEFINED) 96 - sqlite3_bind_null (params->ins_nodes_stmt, 2); 97 - else 98 - sqlite3_bind_int64 (params->ins_nodes_stmt, 2, node->version); 99 - if (node->timestamp == NULL) 174 + sqlite3_bind_int64 (params->ins_nodes_stmt, 1, glob_node.id); 175 + sqlite3_bind_int64 (params->ins_nodes_stmt, 2, glob_node.version); 176 + if (glob_node.timestamp == NULL) 100 177 sqlite3_bind_null (params->ins_nodes_stmt, 3); 101 178 else 102 - sqlite3_bind_text (params->ins_nodes_stmt, 3, node->timestamp, 103 - strlen (node->timestamp), SQLITE_STATIC); 104 - if (node->uid == READOSM_UNDEFINED) 105 - sqlite3_bind_null (params->ins_nodes_stmt, 4); 106 - else 107 - sqlite3_bind_int64 (params->ins_nodes_stmt, 4, node->uid); 108 - if (node->user == NULL) 179 + sqlite3_bind_text (params->ins_nodes_stmt, 3, glob_node.timestamp, 180 + strlen (glob_node.timestamp), SQLITE_STATIC); 181 + sqlite3_bind_int64 (params->ins_nodes_stmt, 4, glob_node.uid); 182 + if (glob_node.user == NULL) 109 183 sqlite3_bind_null (params->ins_nodes_stmt, 5); 110 184 else 111 - sqlite3_bind_text (params->ins_nodes_stmt, 5, node->user, 112 - strlen (node->user), SQLITE_STATIC); 113 - if (node->changeset == READOSM_UNDEFINED) 114 - sqlite3_bind_null (params->ins_nodes_stmt, 6); 115 - else 116 - sqlite3_bind_int64 (params->ins_nodes_stmt, 6, node->changeset); 117 - if (!geom) 118 - sqlite3_bind_null (params->ins_nodes_stmt, 7); 119 - else 120 - { 121 - gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 122 - gaiaFreeGeomColl (geom); 123 - sqlite3_bind_blob (params->ins_nodes_stmt, 7, blob, blob_size, free); 124 - } 185 + sqlite3_bind_text (params->ins_nodes_stmt, 5, glob_node.user, 186 + strlen (glob_node.user), SQLITE_STATIC); 187 + sqlite3_bind_int64 (params->ins_nodes_stmt, 6, glob_node.changeset); 188 + gaiaToSpatiaLiteBlobWkb (geom, &blob, &blob_size); 189 + gaiaFreeGeomColl (geom); 190 + sqlite3_bind_blob (params->ins_nodes_stmt, 7, blob, blob_size, free); 125 191 ret = sqlite3_step (params->ins_nodes_stmt); 126 192 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 127 193 ; 128 194 else 129 195 { 130 196 fprintf (stderr, "sqlite3_step() error: INSERT INTO osm_nodes\n"); 131 - return 0; 197 + return; 132 198 } 133 199 params->wr_nodes += 1; 134 200 135 - for (i_tag = 0; i_tag < node->tag_count; i_tag++) 201 + p_tag = glob_node.first; 202 + while (p_tag) 136 203 { 137 - p_tag = node->tags + i_tag; 138 204 sqlite3_reset (params->ins_node_tags_stmt); 139 205 sqlite3_clear_bindings (params->ins_node_tags_stmt); 140 - sqlite3_bind_int64 (params->ins_node_tags_stmt, 1, node->id); 141 - sqlite3_bind_int (params->ins_node_tags_stmt, 2, i_tag); 142 - if (p_tag->key == NULL) 206 + sqlite3_bind_int64 (params->ins_node_tags_stmt, 1, glob_node.id); 207 + sqlite3_bind_int (params->ins_node_tags_stmt, 2, sub); 208 + sub++; 209 + if (p_tag->k == NULL) 143 210 sqlite3_bind_null (params->ins_node_tags_stmt, 3); 144 211 else 145 - sqlite3_bind_text (params->ins_node_tags_stmt, 3, p_tag->key, 146 - strlen (p_tag->key), SQLITE_STATIC); 147 - if (p_tag->value == NULL) 212 + sqlite3_bind_text (params->ins_node_tags_stmt, 3, p_tag->k, 213 + strlen (p_tag->k), SQLITE_STATIC); 214 + if (p_tag->k == NULL) 148 215 sqlite3_bind_null (params->ins_node_tags_stmt, 4); 149 216 else 150 - sqlite3_bind_text (params->ins_node_tags_stmt, 4, p_tag->value, 151 - strlen (p_tag->value), SQLITE_STATIC); 217 + sqlite3_bind_text (params->ins_node_tags_stmt, 4, p_tag->v, 218 + strlen (p_tag->v), SQLITE_STATIC); 152 219 ret = sqlite3_step (params->ins_node_tags_stmt); 153 220 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 154 221 ; 155 222 else 156 223 { 157 224 fprintf (stderr, 158 225 "sqlite3_step() error: INSERT INTO osm_node_tags\n"); 159 - return 0; 226 + return; 160 227 } 161 228 params->wr_node_tags += 1; 229 + p_tag = p_tag->next; 162 230 } 163 - return 1; 164 231 } 165 232 166 -static int 167 -insert_way (struct aux_params *params, const readosm_way * way) 233 +static void 234 +insert_way (struct aux_params *params) 168 235 { 169 236 int ret; 170 - int i_tag; 171 - int i_ref; 172 - const readosm_tag *p_tag; 237 + int sub = 0; 238 + struct tag *p_tag; 239 + struct node_ref *nr; 173 240 sqlite3_reset (params->ins_ways_stmt); 174 241 sqlite3_clear_bindings (params->ins_ways_stmt); 175 - sqlite3_bind_int64 (params->ins_ways_stmt, 1, way->id); 176 - if (way->version == READOSM_UNDEFINED) 177 - sqlite3_bind_null (params->ins_ways_stmt, 2); 178 - else 179 - sqlite3_bind_int64 (params->ins_ways_stmt, 2, way->version); 180 - if (way->timestamp == NULL) 242 + sqlite3_bind_int64 (params->ins_ways_stmt, 1, glob_way.id); 243 + sqlite3_bind_int64 (params->ins_ways_stmt, 2, glob_way.version); 244 + if (glob_way.timestamp == NULL) 181 245 sqlite3_bind_null (params->ins_ways_stmt, 3); 182 246 else 183 - sqlite3_bind_text (params->ins_ways_stmt, 3, way->timestamp, 184 - strlen (way->timestamp), SQLITE_STATIC); 185 - if (way->uid == READOSM_UNDEFINED) 186 - sqlite3_bind_null (params->ins_ways_stmt, 4); 187 - else 188 - sqlite3_bind_int64 (params->ins_ways_stmt, 4, way->uid); 189 - if (way->user == NULL) 247 + sqlite3_bind_text (params->ins_ways_stmt, 3, glob_way.timestamp, 248 + strlen (glob_way.timestamp), SQLITE_STATIC); 249 + sqlite3_bind_int64 (params->ins_ways_stmt, 4, glob_way.uid); 250 + if (glob_way.user == NULL) 190 251 sqlite3_bind_null (params->ins_ways_stmt, 5); 191 252 else 192 - sqlite3_bind_text (params->ins_ways_stmt, 5, way->user, 193 - strlen (way->user), SQLITE_STATIC); 194 - if (way->changeset == READOSM_UNDEFINED) 195 - sqlite3_bind_null (params->ins_ways_stmt, 6); 196 - else 197 - sqlite3_bind_int64 (params->ins_ways_stmt, 6, way->changeset); 253 + sqlite3_bind_text (params->ins_ways_stmt, 5, glob_way.user, 254 + strlen (glob_way.user), SQLITE_STATIC); 255 + sqlite3_bind_int64 (params->ins_ways_stmt, 6, glob_way.changeset); 198 256 ret = sqlite3_step (params->ins_ways_stmt); 199 257 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 200 258 ; 201 259 else 202 260 { 203 261 fprintf (stderr, "sqlite3_step() error: INSERT INTO osm_ways\n"); 204 - return 0; 262 + return; 205 263 } 206 264 params->wr_ways += 1; 207 265 208 - for (i_tag = 0; i_tag < way->tag_count; i_tag++) 266 + p_tag = glob_way.first; 267 + while (p_tag) 209 268 { 210 - p_tag = way->tags + i_tag; 211 269 sqlite3_reset (params->ins_way_tags_stmt); 212 270 sqlite3_clear_bindings (params->ins_way_tags_stmt); 213 - sqlite3_bind_int64 (params->ins_way_tags_stmt, 1, way->id); 214 - sqlite3_bind_int (params->ins_way_tags_stmt, 2, i_tag); 215 - if (p_tag->key == NULL) 271 + sqlite3_bind_int64 (params->ins_way_tags_stmt, 1, glob_way.id); 272 + sqlite3_bind_int (params->ins_way_tags_stmt, 2, sub); 273 + sub++; 274 + if (p_tag->k == NULL) 216 275 sqlite3_bind_null (params->ins_way_tags_stmt, 3); 217 276 else 218 - sqlite3_bind_text (params->ins_way_tags_stmt, 3, p_tag->key, 219 - strlen (p_tag->key), SQLITE_STATIC); 220 - if (p_tag->value == NULL) 277 + sqlite3_bind_text (params->ins_way_tags_stmt, 3, p_tag->k, 278 + strlen (p_tag->k), SQLITE_STATIC); 279 + if (p_tag->v == NULL) 221 280 sqlite3_bind_null (params->ins_way_tags_stmt, 4); 222 281 else 223 - sqlite3_bind_text (params->ins_way_tags_stmt, 4, p_tag->value, 224 - strlen (p_tag->value), SQLITE_STATIC); 282 + sqlite3_bind_text (params->ins_way_tags_stmt, 4, p_tag->v, 283 + strlen (p_tag->v), SQLITE_STATIC); 225 284 ret = sqlite3_step (params->ins_way_tags_stmt); 226 285 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 227 286 ; 228 287 else 229 288 { 230 289 fprintf (stderr, 231 290 "sqlite3_step() error: INSERT INTO osm_way_tags\n"); 232 - return 0; 291 + return; 233 292 } 234 293 params->wr_way_tags += 1; 294 + p_tag = p_tag->next; 235 295 } 236 296 237 - for (i_ref = 0; i_ref < way->node_ref_count; i_ref++) 297 + sub = 0; 298 + nr = glob_way.first_node; 299 + while (nr) 238 300 { 239 - sqlite3_int64 node_id = *(way->node_refs + i_ref); 240 301 sqlite3_reset (params->ins_way_refs_stmt); 241 302 sqlite3_clear_bindings (params->ins_way_refs_stmt); 242 - sqlite3_bind_int64 (params->ins_way_refs_stmt, 1, way->id); 243 - sqlite3_bind_int (params->ins_way_refs_stmt, 2, i_ref); 244 - sqlite3_bind_int64 (params->ins_way_refs_stmt, 3, node_id); 303 + sqlite3_bind_int64 (params->ins_way_refs_stmt, 1, glob_way.id); 304 + sqlite3_bind_int (params->ins_way_refs_stmt, 2, sub); 305 + sub++; 306 + sqlite3_bind_int64 (params->ins_way_refs_stmt, 3, nr->node_id); 245 307 ret = sqlite3_step (params->ins_way_refs_stmt); 246 308 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 247 309 ; 248 310 else 249 311 { 250 312 fprintf (stderr, 251 313 "sqlite3_step() error: INSERT INTO osm_way_refs\n"); 252 - return 0; 314 + return; 253 315 } 254 316 params->wr_way_refs += 1; 317 + nr = nr->next; 255 318 } 256 - return 1; 257 319 } 258 320 259 -static int 260 -insert_relation (struct aux_params *params, const readosm_relation * relation) 321 +static void 322 +insert_relation (struct aux_params *params) 261 323 { 262 324 int ret; 263 - int i_tag; 264 - int i_member; 265 - const readosm_tag *p_tag; 266 - const readosm_member *p_member; 325 + int sub = 0; 326 + struct tag *p_tag; 327 + struct multi_ref *mr; 267 328 sqlite3_reset (params->ins_relations_stmt); 268 329 sqlite3_clear_bindings (params->ins_relations_stmt); 269 - sqlite3_bind_int64 (params->ins_relations_stmt, 1, relation->id); 270 - if (relation->version == READOSM_UNDEFINED) 271 - sqlite3_bind_null (params->ins_relations_stmt, 2); 272 - else 273 - sqlite3_bind_int64 (params->ins_relations_stmt, 2, relation->version); 274 - if (relation->timestamp == NULL) 330 + sqlite3_bind_int64 (params->ins_relations_stmt, 1, glob_relation.id); 331 + sqlite3_bind_int64 (params->ins_relations_stmt, 2, glob_relation.version); 332 + if (glob_relation.timestamp == NULL) 275 333 sqlite3_bind_null (params->ins_relations_stmt, 3); 276 334 else 277 - sqlite3_bind_text (params->ins_relations_stmt, 3, relation->timestamp, 278 - strlen (relation->timestamp), SQLITE_STATIC); 279 - if (relation->uid == READOSM_UNDEFINED) 280 - sqlite3_bind_null (params->ins_relations_stmt, 4); 281 - else 282 - sqlite3_bind_int64 (params->ins_relations_stmt, 4, relation->uid); 283 - if (relation->user == NULL) 335 + sqlite3_bind_text (params->ins_relations_stmt, 3, 336 + glob_relation.timestamp, 337 + strlen (glob_relation.timestamp), SQLITE_STATIC); 338 + sqlite3_bind_int64 (params->ins_relations_stmt, 4, glob_relation.uid); 339 + if (glob_relation.user == NULL) 284 340 sqlite3_bind_null (params->ins_relations_stmt, 5); 285 341 else 286 - sqlite3_bind_text (params->ins_relations_stmt, 5, relation->user, 287 - strlen (relation->user), SQLITE_STATIC); 288 - if (relation->changeset == READOSM_UNDEFINED) 289 - sqlite3_bind_null (params->ins_relations_stmt, 6); 290 - else 291 - sqlite3_bind_int64 (params->ins_relations_stmt, 6, relation->changeset); 342 + sqlite3_bind_text (params->ins_relations_stmt, 5, glob_relation.user, 343 + strlen (glob_relation.user), SQLITE_STATIC); 344 + sqlite3_bind_int64 (params->ins_relations_stmt, 6, glob_relation.changeset); 292 345 ret = sqlite3_step (params->ins_relations_stmt); 293 346 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 294 347 ; 295 348 else 296 349 { 297 350 fprintf (stderr, "sqlite3_step() error: INSERT INTO osm_relations\n"); 298 - return 0; 351 + return; 299 352 } 300 353 params->wr_relations += 1; 301 354 302 - for (i_tag = 0; i_tag < relation->tag_count; i_tag++) 355 + p_tag = glob_relation.first; 356 + while (p_tag) 303 357 { 304 - p_tag = relation->tags + i_tag; 305 358 sqlite3_reset (params->ins_relation_tags_stmt); 306 359 sqlite3_clear_bindings (params->ins_relation_tags_stmt); 307 - sqlite3_bind_int64 (params->ins_relation_tags_stmt, 1, relation->id); 308 - sqlite3_bind_int (params->ins_relation_tags_stmt, 2, i_tag); 309 - if (p_tag->key == NULL) 360 + sqlite3_bind_int64 (params->ins_relation_tags_stmt, 1, 361 + glob_relation.id); 362 + sqlite3_bind_int (params->ins_relation_tags_stmt, 2, sub); 363 + sub++; 364 + if (p_tag->k == NULL) 310 365 sqlite3_bind_null (params->ins_relation_tags_stmt, 3); 311 366 else 312 - sqlite3_bind_text (params->ins_relation_tags_stmt, 3, p_tag->key, 313 - strlen (p_tag->key), SQLITE_STATIC); 314 - if (p_tag->value == NULL) 367 + sqlite3_bind_text (params->ins_relation_tags_stmt, 3, p_tag->k, 368 + strlen (p_tag->k), SQLITE_STATIC); 369 + if (p_tag->v == NULL) 315 370 sqlite3_bind_null (params->ins_relation_tags_stmt, 4); 316 371 else 317 - sqlite3_bind_text (params->ins_relation_tags_stmt, 4, 318 - p_tag->value, strlen (p_tag->value), 319 - SQLITE_STATIC); 372 + sqlite3_bind_text (params->ins_relation_tags_stmt, 4, p_tag->v, 373 + strlen (p_tag->v), SQLITE_STATIC); 320 374 ret = sqlite3_step (params->ins_relation_tags_stmt); 321 375 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 322 376 ; 323 377 else 324 378 { 325 379 fprintf (stderr, 326 380 "sqlite3_step() error: INSERT INTO osm_relation_tags\n"); 327 - return 0; 381 + return; 328 382 } 329 383 params->wr_rel_tags += 1; 384 + p_tag = p_tag->next; 330 385 } 331 386 332 - for (i_member = 0; i_member < relation->member_count; i_member++) 387 + sub = 0; 388 + mr = glob_relation.first_rel; 389 + while (mr) 333 390 { 334 - p_member = relation->members + i_member; 335 391 sqlite3_reset (params->ins_relation_refs_stmt); 336 392 sqlite3_clear_bindings (params->ins_relation_refs_stmt); 337 - sqlite3_bind_int64 (params->ins_relation_refs_stmt, 1, relation->id); 338 - sqlite3_bind_int (params->ins_relation_refs_stmt, 2, i_member); 339 - if (p_member->member_type == READOSM_MEMBER_NODE) 393 + sqlite3_bind_int64 (params->ins_relation_refs_stmt, 1, 394 + glob_relation.id); 395 + sqlite3_bind_int (params->ins_relation_refs_stmt, 2, sub); 396 + sub++; 397 + if (mr->type == 'N') 340 398 sqlite3_bind_text (params->ins_relation_refs_stmt, 3, "N", 1, 341 399 SQLITE_STATIC); 342 - else if (p_member->member_type == READOSM_MEMBER_WAY) 400 + else if (mr->type == 'W') 343 401 sqlite3_bind_text (params->ins_relation_refs_stmt, 3, "W", 1, 344 402 SQLITE_STATIC); 345 - else if (p_member->member_type == READOSM_MEMBER_RELATION) 403 + else if (mr->type == 'R') 346 404 sqlite3_bind_text (params->ins_relation_refs_stmt, 3, "R", 1, 347 405 SQLITE_STATIC); 348 406 else 349 407 sqlite3_bind_text (params->ins_relation_refs_stmt, 3, "?", 1, 350 408 SQLITE_STATIC); 351 - sqlite3_bind_int64 (params->ins_relation_refs_stmt, 4, p_member->id); 352 - if (p_member->role == NULL) 409 + sqlite3_bind_int64 (params->ins_relation_refs_stmt, 4, mr->id); 410 + if (mr->role == NULL) 353 411 sqlite3_bind_null (params->ins_relation_refs_stmt, 5); 354 412 else 355 413 sqlite3_bind_text (params->ins_relation_refs_stmt, 5, 356 - p_member->role, strlen (p_member->role), 357 - SQLITE_STATIC); 414 + mr->role, strlen (mr->role), SQLITE_STATIC); 358 415 ret = sqlite3_step (params->ins_relation_refs_stmt); 359 416 if (ret == SQLITE_DONE || ret == SQLITE_ROW) 360 417 ; 361 418 else 362 419 { 363 420 fprintf (stderr, 364 421 "sqlite3_step() error: INSERT INTO osm_relation_refs\n"); 365 - return 0; 422 + return; 366 423 } 367 424 params->wr_rel_refs += 1; 368 - } 369 - return 1; 425 + mr = mr->next; 426 + } 427 +} 428 + 429 +static void 430 +clean_node () 431 +{ 432 +/* cleaning the current node */ 433 + struct tag *pt; 434 + struct tag *ptn; 435 + if (glob_node.timestamp) 436 + free (glob_node.timestamp); 437 + if (glob_node.user) 438 + free (glob_node.user); 439 + pt = glob_node.first; 440 + while (pt) 441 + { 442 + ptn = pt->next; 443 + if (pt->k) 444 + free (pt->k); 445 + if (pt->v) 446 + free (pt->v); 447 + free (pt); 448 + pt = ptn; 449 + } 450 + glob_node.timestamp = NULL; 451 + glob_node.user = NULL; 452 + glob_node.first = NULL; 453 + glob_node.last = NULL; 454 +} 455 + 456 +static void 457 +clean_way () 458 +{ 459 +/* cleaning the current way */ 460 + struct tag *pt; 461 + struct tag *ptn; 462 + struct node_ref *nr; 463 + struct node_ref *nrn; 464 + if (glob_way.timestamp) 465 + free (glob_way.timestamp); 466 + if (glob_way.user) 467 + free (glob_way.user); 468 + pt = glob_way.first; 469 + while (pt) 470 + { 471 + ptn = pt->next; 472 + if (pt->k) 473 + free (pt->k); 474 + if (pt->v) 475 + free (pt->v); 476 + free (pt); 477 + pt = ptn; 478 + } 479 + nr = glob_way.first_node; 480 + while (nr) 481 + { 482 + nrn = nr->next; 483 + free (nr); 484 + nr = nrn; 485 + } 486 + glob_way.timestamp = NULL; 487 + glob_way.user = NULL; 488 + glob_way.first = NULL; 489 + glob_way.last = NULL; 490 + glob_way.first_node = NULL; 491 + glob_way.last_node = NULL; 492 +} 493 + 494 +static void 495 +clean_relation () 496 +{ 497 +/* cleaning the current relation */ 498 + struct tag *pt; 499 + struct tag *ptn; 500 + struct multi_ref *mr; 501 + struct multi_ref *mrn; 502 + if (glob_relation.timestamp) 503 + free (glob_relation.timestamp); 504 + if (glob_relation.user) 505 + free (glob_relation.user); 506 + pt = glob_relation.first; 507 + while (pt) 508 + { 509 + ptn = pt->next; 510 + if (pt->k) 511 + free (pt->k); 512 + if (pt->v) 513 + free (pt->v); 514 + free (pt); 515 + pt = ptn; 516 + } 517 + mr = glob_relation.first_rel; 518 + while (mr) 519 + { 520 + mrn = mr->next; 521 + if (mr->role) 522 + free (mr->role); 523 + free (mr); 524 + mr = mrn; 525 + } 526 + glob_relation.timestamp = NULL; 527 + glob_relation.user = NULL; 528 + glob_relation.first = NULL; 529 + glob_relation.last = NULL; 530 + glob_relation.first_rel = NULL; 531 + glob_relation.last_rel = NULL; 532 +} 533 + 534 +static void 535 +start_node (struct aux_params *params, const char **attr) 536 +{ 537 + int i; 538 + int len; 539 + for (i = 0; attr[i]; i += 2) 540 + { 541 + if (strcmp (attr[i], "id") == 0) 542 + glob_node.id = atol_64 (attr[i + 1]); 543 + if (strcmp (attr[i], "version") == 0) 544 + glob_node.version = atol_64 (attr[i + 1]); 545 + if (strcmp (attr[i], "timestamp") == 0) 546 + { 547 + if (glob_node.timestamp) 548 + free (glob_node.timestamp); 549 + len = strlen (attr[i + 1]); 550 + glob_node.timestamp = malloc (len + 1); 551 + strcpy (glob_node.timestamp, attr[i + 1]); 552 + } 553 + if (strcmp (attr[i], "uid") == 0) 554 + glob_node.uid = atol_64 (attr[i + 1]); 555 + if (strcmp (attr[i], "user") == 0) 556 + { 557 + if (glob_node.user) 558 + free (glob_node.user); 559 + len = strlen (attr[i + 1]); 560 + glob_node.user = malloc (len + 1); 561 + strcpy (glob_node.user, attr[i + 1]); 562 + } 563 + if (strcmp (attr[i], "changeset") == 0) 564 + glob_node.changeset = atol_64 (attr[i + 1]); 565 + if (strcmp (attr[i], "lat") == 0) 566 + glob_node.lat = atof (attr[i + 1]); 567 + if (strcmp (attr[i], "lon") == 0) 568 + glob_node.lon = atof (attr[i + 1]); 569 + } 570 + params->current_tag = CURRENT_TAG_IS_NODE; 571 +} 572 + 573 +static void 574 +end_node (struct aux_params *params) 575 +{ 576 + insert_node (params); 577 + clean_node (); 578 + params->current_tag = CURRENT_TAG_UNKNOWN; 579 +} 580 + 581 +static void 582 +start_way (struct aux_params *params, const char **attr) 583 +{ 584 + int i; 585 + int len; 586 + for (i = 0; attr[i]; i += 2) 587 + { 588 + if (strcmp (attr[i], "id") == 0) 589 + glob_way.id = atol_64 (attr[i + 1]); 590 + if (strcmp (attr[i], "version") == 0) 591 + glob_way.version = atol_64 (attr[i + 1]); 592 + if (strcmp (attr[i], "timestamp") == 0) 593 + { 594 + if (glob_way.timestamp) 595 + free (glob_way.timestamp); 596 + len = strlen (attr[i + 1]); 597 + glob_way.timestamp = malloc (len + 1); 598 + strcpy (glob_way.timestamp, attr[i + 1]); 599 + } 600 + if (strcmp (attr[i], "uid") == 0) 601 + glob_way.uid = atol_64 (attr[i + 1]); 602 + if (strcmp (attr[i], "user") == 0) 603 + { 604 + if (glob_way.user) 605 + free (glob_way.user); 606 + len = strlen (attr[i + 1]); 607 + glob_way.user = malloc (len + 1); 608 + strcpy (glob_way.user, attr[i + 1]); 609 + } 610 + if (strcmp (attr[i], "changeset") == 0) 611 + glob_way.changeset = atol_64 (attr[i + 1]); 612 + } 613 + params->current_tag = CURRENT_TAG_IS_WAY; 614 +} 615 + 616 +static void 617 +end_way (struct aux_params *params) 618 +{ 619 + insert_way (params); 620 + clean_way (); 621 + params->current_tag = CURRENT_TAG_UNKNOWN; 622 +} 623 + 624 +static void 625 +start_relation (struct aux_params *params, const char **attr) 626 +{ 627 + int i; 628 + int len; 629 + for (i = 0; attr[i]; i += 2) 630 + { 631 + if (strcmp (attr[i], "id") == 0) 632 + glob_relation.id = atol_64 (attr[i + 1]); 633 + if (strcmp (attr[i], "version") == 0) 634 + glob_relation.version = atol_64 (attr[i + 1]); 635 + if (strcmp (attr[i], "timestamp") == 0) 636 + { 637 + if (glob_relation.timestamp) 638 + free (glob_relation.timestamp); 639 + len = strlen (attr[i + 1]); 640 + glob_relation.timestamp = malloc (len + 1); 641 + strcpy (glob_relation.timestamp, attr[i + 1]); 642 + } 643 + if (strcmp (attr[i], "uid") == 0) 644 + glob_relation.uid = atol_64 (attr[i + 1]); 645 + if (strcmp (attr[i], "user") == 0) 646 + { 647 + if (glob_relation.user) 648 + free (glob_relation.user); 649 + len = strlen (attr[i + 1]); 650 + glob_relation.user = malloc (len + 1); 651 + strcpy (glob_relation.user, attr[i + 1]); 652 + } 653 + if (strcmp (attr[i], "changeset") == 0) 654 + glob_relation.changeset = atol_64 (attr[i + 1]); 655 + } 656 + params->current_tag = CURRENT_TAG_IS_RELATION; 657 +} 658 + 659 +static void 660 +end_relation (struct aux_params *params) 661 +{ 662 + insert_relation (params); 663 + clean_relation (); 664 + params->current_tag = CURRENT_TAG_UNKNOWN; 665 +} 666 + 667 +static void 668 +start_xtag (struct aux_params *params, const char **attr) 669 +{ 670 + int i; 671 + int len; 672 + const char *k = NULL; 673 + const char *v = NULL; 674 + struct tag *p_tag; 675 + for (i = 0; attr[i]; i += 2) 676 + { 677 + if (strcmp (attr[i], "k") == 0) 678 + k = attr[i + 1]; 679 + if (strcmp (attr[i], "v") == 0) 680 + v = attr[i + 1]; 681 + } 682 + 683 +/* appending a new tag to the current item */ 684 + if (params->current_tag == CURRENT_TAG_IS_NODE) 685 + { 686 + p_tag = malloc (sizeof (struct tag)); 687 + if (glob_node.first == NULL) 688 + glob_node.first = p_tag; 689 + if (glob_node.last != NULL) 690 + glob_node.last->next = p_tag; 691 + glob_node.last = p_tag; 692 + p_tag->next = NULL; 693 + len = strlen (k); 694 + p_tag->k = malloc (len + 1); 695 + strcpy (p_tag->k, k); 696 + len = strlen (v); 697 + p_tag->v = malloc (len + 1); 698 + strcpy (p_tag->v, v); 699 + } 700 + if (params->current_tag == CURRENT_TAG_IS_WAY) 701 + { 702 + p_tag = malloc (sizeof (struct tag)); 703 + if (glob_way.first == NULL) 704 + glob_way.first = p_tag; 705 + if (glob_way.last != NULL) 706 + glob_way.last->next = p_tag; 707 + glob_way.last = p_tag; 708 + p_tag->next = NULL; 709 + len = strlen (k); 710 + p_tag->k = malloc (len + 1); 711 + strcpy (p_tag->k, k); 712 + len = strlen (v); 713 + p_tag->v = malloc (len + 1); 714 + strcpy (p_tag->v, v); 715 + } 716 + if (params->current_tag == CURRENT_TAG_IS_RELATION) 717 + { 718 + p_tag = malloc (sizeof (struct tag)); 719 + if (glob_relation.first == NULL) 720 + glob_relation.first = p_tag; 721 + if (glob_relation.last != NULL) 722 + glob_relation.last->next = p_tag; 723 + glob_relation.last = p_tag; 724 + p_tag->next = NULL; 725 + len = strlen (k); 726 + p_tag->k = malloc (len + 1); 727 + strcpy (p_tag->k, k); 728 + len = strlen (v); 729 + p_tag->v = malloc (len + 1); 730 + strcpy (p_tag->v, v); 731 + } 732 +} 733 + 734 +static void 735 +start_nd (struct aux_params *params, const char **attr) 736 +{ 737 + int i; 738 + sqlite3_int64 node_id; 739 + struct node_ref *nr; 740 + for (i = 0; attr[i]; i += 2) 741 + { 742 + if (strcmp (attr[i], "ref") == 0) 743 + node_id = atol_64 (attr[i + 1]); 744 + } 745 +/* appending a new node-ref-id to the current item */ 746 + if (params->current_tag == CURRENT_TAG_IS_WAY) 747 + { 748 + nr = malloc (sizeof (struct node_ref)); 749 + if (glob_way.first_node == NULL) 750 + glob_way.first_node = nr; 751 + if (glob_way.last_node != NULL) 752 + glob_way.last_node->next = nr; 753 + glob_way.last_node = nr; 754 + nr->next = NULL; 755 + nr->node_id = node_id; 756 + } 370 757 } 371 758 372 -static int 373 -consume_node (const void *user_data, const readosm_node * node) 759 +static void 760 +start_member (struct aux_params *params, const char **attr) 374 761 { 375 -/* processing an OSM Node (ReadOSM callback function) */ 376 - struct aux_params *params = (struct aux_params *) user_data; 377 - if (!insert_node (params, node)) 378 - return READOSM_ABORT; 379 - return READOSM_OK; 762 + int i; 763 + sqlite3_int64 id; 764 + const char *role = NULL; 765 + int len; 766 + int is_way = 0; 767 + int is_node = 0; 768 + int is_rel = 0; 769 + struct multi_ref *mr; 770 + for (i = 0; attr[i]; i += 2) 771 + { 772 + if (strcmp (attr[i], "type") == 0) 773 + { 774 + if (strcmp (attr[i + 1], "way") == 0) 775 + is_way = 1; 776 + if (strcmp (attr[i + 1], "node") == 0) 777 + is_node = 1; 778 + if (strcmp (attr[i + 1], "relation") == 0) 779 + is_rel = 1; 780 + } 781 + if (strcmp (attr[i], "ref") == 0) 782 + id = atol_64 (attr[i + 1]); 783 + if (strcmp (attr[i], "role") == 0) 784 + role = attr[i + 1]; 785 + } 786 + 787 + if (params->current_tag == CURRENT_TAG_IS_RELATION) 788 + { 789 + /* appending a new relation-ref-id to the current item */ 790 + mr = malloc (sizeof (struct multi_ref)); 791 + if (glob_relation.first_rel == NULL) 792 + glob_relation.first_rel = mr; 793 + if (glob_relation.last_rel != NULL) 794 + glob_relation.last_rel->next = mr; 795 + glob_relation.last_rel = mr; 796 + mr->next = NULL; 797 + mr->type = '?'; 798 + if (is_node) 799 + mr->type = 'N'; 800 + if (is_way) 801 + mr->type = 'W'; 802 + if (is_rel) 803 + mr->type = 'R'; 804 + mr->id = id; 805 + mr->role = NULL; 806 + if (role) 807 + { 808 + len = strlen (role); 809 + mr->role = malloc (len + 1); 810 + strcpy (mr->role, role); 811 + } 812 + } 380 813 } 381 814 382 -static int 383 -consume_way (const void *user_data, const readosm_way * way) 815 +static void 816 +start_tag (void *data, const char *el, const char **attr) 384 817 { 385 -/* processing an OSM Way (ReadOSM callback function) */ 386 - struct aux_params *params = (struct aux_params *) user_data; 387 - if (!insert_way (params, way)) 388 - return READOSM_ABORT; 389 - return READOSM_OK; 818 + struct aux_params *params = (struct aux_params *) data; 819 + if (strcmp (el, "node") == 0) 820 + start_node (params, attr); 821 + if (strcmp (el, "way") == 0) 822 + start_way (params, attr); 823 + if (strcmp (el, "relation") == 0) 824 + start_relation (params, attr); 825 + if (strcmp (el, "tag") == 0) 826 + start_xtag (params, attr); 827 + if (strcmp (el, "nd") == 0) 828 + start_nd (params, attr); 829 + if (strcmp (el, "member") == 0) 830 + start_member (params, attr); 390 831 } 391 832 392 -static int 393 -consume_relation (const void *user_data, const readosm_relation * relation) 833 +static void 834 +end_tag (void *data, const char *el) 394 835 { 395 -/* processing an OSM Relation (ReadOSM callback function) */ 396 - struct aux_params *params = (struct aux_params *) user_data; 397 - if (!insert_relation (params, relation)) 398 - return READOSM_ABORT; 399 - return READOSM_OK; 836 + struct aux_params *params = (struct aux_params *) data; 837 + if (strcmp (el, "node") == 0) 838 + end_node (params); 839 + if (strcmp (el, "way") == 0) 840 + end_way (params); 841 + if (strcmp (el, "relation") == 0) 842 + end_relation (params); 400 843 } 401 844 402 845 static void 403 846 finalize_sql_stmts (struct aux_params *params) 404 847 { 405 848 int ret; 406 849 char *sql_err = NULL; ................................................................................ 429 872 fprintf (stderr, "COMMIT TRANSACTION error: %s\n", sql_err); 430 873 sqlite3_free (sql_err); 431 874 return; 432 875 } 433 876 } 434 877 435 878 static void 436 -create_sql_stmts (struct aux_params *params, int journal_off) 879 +create_sql_stmts (struct aux_params *params) 437 880 { 438 881 sqlite3_stmt *ins_nodes_stmt; 439 882 sqlite3_stmt *ins_node_tags_stmt; 440 883 sqlite3_stmt *ins_ways_stmt; 441 884 sqlite3_stmt *ins_way_tags_stmt; 442 885 sqlite3_stmt *ins_way_refs_stmt; 443 886 sqlite3_stmt *ins_relations_stmt; 444 887 sqlite3_stmt *ins_relation_tags_stmt; 445 888 sqlite3_stmt *ins_relation_refs_stmt; 446 889 char sql[1024]; 447 890 int ret; 448 891 char *sql_err = NULL; 449 892 450 - if (journal_off) 451 - { 452 - /* disabling the journal: unsafe but faster */ 453 - ret = 454 - sqlite3_exec (params->db_handle, "PRAGMA journal_mode = OFF", 455 - NULL, NULL, &sql_err); 456 - if (ret != SQLITE_OK) 457 - { 458 - fprintf (stderr, "PRAGMA journal_mode=OFF error: %s\n", 459 - sql_err); 460 - sqlite3_free (sql_err); 461 - return; 462 - } 463 - } 464 - 465 893 /* the complete operation is handled as an unique SQL Transaction */ 466 894 ret = sqlite3_exec (params->db_handle, "BEGIN", NULL, NULL, &sql_err); 467 895 if (ret != SQLITE_OK) 468 896 { 469 897 fprintf (stderr, "BEGIN TRANSACTION error: %s\n", sql_err); 470 898 sqlite3_free (sql_err); 471 899 return; ................................................................................ 735 1163 ; 736 1164 else 737 1165 goto unknown; 738 1166 739 1167 /* creating the OSM "raw" nodes */ 740 1168 strcpy (sql, "CREATE TABLE osm_nodes (\n"); 741 1169 strcat (sql, "node_id INTEGER NOT NULL PRIMARY KEY,\n"); 742 - strcat (sql, "version INTEGER,\n"); 1170 + strcat (sql, "version INTEGER NOT NULL,\n"); 743 1171 strcat (sql, "timestamp TEXT,\n"); 744 - strcat (sql, "uid INTEGER,\n"); 1172 + strcat (sql, "uid INTEGER NOT NULL,\n"); 745 1173 strcat (sql, "user TEXT,\n"); 746 - strcat (sql, "changeset INTEGER,\n"); 1174 + strcat (sql, "changeset INTEGER NOT NULL,\n"); 747 1175 strcat (sql, "filtered INTEGER NOT NULL)\n"); 748 1176 ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg); 749 1177 if (ret != SQLITE_OK) 750 1178 { 751 1179 fprintf (stderr, "CREATE TABLE 'osm_nodes' error: %s\n", err_msg); 752 1180 sqlite3_free (err_msg); 753 1181 sqlite3_close (db_handle); ................................................................................ 779 1207 sqlite3_free (err_msg); 780 1208 sqlite3_close (db_handle); 781 1209 return; 782 1210 } 783 1211 /* creating the OSM "raw" ways */ 784 1212 strcpy (sql, "CREATE TABLE osm_ways (\n"); 785 1213 strcat (sql, "way_id INTEGER NOT NULL PRIMARY KEY,\n"); 786 - strcat (sql, "version INTEGER,\n"); 1214 + strcat (sql, "version INTEGER NOT NULL,\n"); 787 1215 strcat (sql, "timestamp TEXT,\n"); 788 - strcat (sql, "uid INTEGER,\n"); 1216 + strcat (sql, "uid INTEGER NOT NULL,\n"); 789 1217 strcat (sql, "user TEXT,\n"); 790 - strcat (sql, "changeset INTEGER,\n"); 1218 + strcat (sql, "changeset INTEGER NOT NULL,\n"); 791 1219 strcat (sql, "filtered INTEGER NOT NULL)\n"); 792 1220 ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg); 793 1221 if (ret != SQLITE_OK) 794 1222 { 795 1223 fprintf (stderr, "CREATE TABLE 'osm_ways' error: %s\n", err_msg); 796 1224 sqlite3_free (err_msg); 797 1225 sqlite3_close (db_handle); ................................................................................ 840 1268 sqlite3_free (err_msg); 841 1269 sqlite3_close (db_handle); 842 1270 return; 843 1271 } 844 1272 /* creating the OSM "raw" relations */ 845 1273 strcpy (sql, "CREATE TABLE osm_relations (\n"); 846 1274 strcat (sql, "rel_id INTEGER NOT NULL PRIMARY KEY,\n"); 847 - strcat (sql, "version INTEGER,\n"); 1275 + strcat (sql, "version INTEGER NOT NULL,\n"); 848 1276 strcat (sql, "timestamp TEXT,\n"); 849 - strcat (sql, "uid INTEGER,\n"); 1277 + strcat (sql, "uid INTEGER NOT NULL,\n"); 850 1278 strcat (sql, "user TEXT,\n"); 851 - strcat (sql, "changeset INTEGER,\n"); 1279 + strcat (sql, "changeset INTEGER NOT NULL,\n"); 852 1280 strcat (sql, "filtered INTEGER NOT NULL)\n"); 853 1281 ret = sqlite3_exec (db_handle, sql, NULL, NULL, &err_msg); 854 1282 if (ret != SQLITE_OK) 855 1283 { 856 1284 fprintf (stderr, "CREATE TABLE 'osm_relations' error: %s\n", err_msg); 857 1285 sqlite3_free (err_msg); 858 1286 sqlite3_close (db_handle); ................................................................................ 925 1353 { 926 1354 /* printing the argument list */ 927 1355 fprintf (stderr, "\n\nusage: spatialite_osm_raw ARGLIST\n"); 928 1356 fprintf (stderr, 929 1357 "==============================================================\n"); 930 1358 fprintf (stderr, 931 1359 "-h or --help print this help message\n"); 932 - fprintf (stderr, "-o or --osm-path pathname the OSM-file path\n"); 933 - fprintf (stderr, 934 - " both OSM-XML (*.osm) and OSM-ProtoBuf\n"); 935 - fprintf (stderr, 936 - " (*.osm.pbf) are indifferenctly supported.\n\n"); 1360 + fprintf (stderr, "-o or --osm-path pathname the OSM-XML file path\n"); 937 1361 fprintf (stderr, 938 1362 "-d or --db-path pathname the SpatiaLite DB path\n\n"); 939 1363 fprintf (stderr, "you can specify the following options as well\n"); 940 1364 fprintf (stderr, 941 1365 "-cs or --cache-size num DB cache size (how many pages)\n"); 942 1366 fprintf (stderr, 943 1367 "-m or --in-memory using IN-MEMORY database\n"); 944 - fprintf (stderr, 945 - "-jo or --journal-off unsafe [but faster] mode\n"); 946 1368 } 947 1369 948 1370 int 949 1371 main (int argc, char *argv[]) 950 1372 { 951 1373 /* the MAIN function simply perform arguments checking */ 952 1374 sqlite3 *handle; 953 1375 int i; 954 1376 int next_arg = ARG_NONE; 955 1377 const char *osm_path = NULL; 956 1378 const char *db_path = NULL; 957 1379 int in_memory = 0; 958 1380 int cache_size = 0; 959 - int journal_off = 0; 960 1381 int error = 0; 1382 + char Buff[BUFFSIZE]; 1383 + int done = 0; 1384 + int len; 1385 + XML_Parser parser; 961 1386 struct aux_params params; 962 - const void *osm_handle; 1387 + FILE *xml_file; 963 1388 964 1389 /* initializing the aux-structs */ 965 1390 params.db_handle = NULL; 966 1391 params.ins_nodes_stmt = NULL; 967 1392 params.ins_node_tags_stmt = NULL; 968 1393 params.ins_ways_stmt = NULL; 969 1394 params.ins_way_tags_stmt = NULL; ................................................................................ 975 1400 params.wr_node_tags = 0; 976 1401 params.wr_ways = 0; 977 1402 params.wr_way_tags = 0; 978 1403 params.wr_way_refs = 0; 979 1404 params.wr_relations = 0; 980 1405 params.wr_rel_tags = 0; 981 1406 params.wr_rel_refs = 0; 1407 + params.current_tag = CURRENT_TAG_UNKNOWN; 1408 + 1409 + glob_node.timestamp = NULL; 1410 + glob_node.user = NULL; 1411 + glob_node.first = NULL; 1412 + glob_node.last = NULL; 1413 + 1414 + glob_way.timestamp = NULL; 1415 + glob_way.user = NULL; 1416 + glob_way.first = NULL; 1417 + glob_way.last = NULL; 1418 + glob_way.first_node = NULL; 1419 + glob_way.last_node = NULL; 1420 + 1421 + glob_relation.timestamp = NULL; 1422 + glob_relation.user = NULL; 1423 + glob_relation.first = NULL; 1424 + glob_relation.last = NULL; 1425 + glob_relation.first_rel = NULL; 1426 + glob_relation.last_rel = NULL; 982 1427 983 1428 for (i = 1; i < argc; i++) 984 1429 { 985 1430 /* parsing the invocation arguments */ 986 1431 if (next_arg != ARG_NONE) 987 1432 { 988 1433 switch (next_arg) ................................................................................ 1034 1479 } 1035 1480 if (strcasecmp (argv[i], "-m") == 0) 1036 1481 { 1037 1482 in_memory = 1; 1038 1483 next_arg = ARG_NONE; 1039 1484 continue; 1040 1485 } 1041 - if (strcasecmp (argv[i], "--in-memory") == 0) 1486 + if (strcasecmp (argv[i], "-in-memory") == 0) 1042 1487 { 1043 1488 in_memory = 1; 1044 - next_arg = ARG_NONE; 1045 - continue; 1046 - } 1047 - if (strcasecmp (argv[i], "-jo") == 0) 1048 - { 1049 - journal_off = 1; 1050 - next_arg = ARG_NONE; 1051 - continue; 1052 - } 1053 - if (strcasecmp (argv[i], "--journal-off") == 0) 1054 - { 1055 - journal_off = 1; 1056 1489 next_arg = ARG_NONE; 1057 1490 continue; 1058 1491 } 1059 1492 fprintf (stderr, "unknown argument: %s\n", argv[i]); 1060 1493 error = 1; 1061 1494 } 1062 1495 if (error) ................................................................................ 1086 1519 1087 1520 /* opening the DB */ 1088 1521 if (in_memory) 1089 1522 cache_size = 0; 1090 1523 open_db (db_path, &handle, cache_size); 1091 1524 if (!handle) 1092 1525 return -1; 1526 + params.db_handle = handle; 1093 1527 if (in_memory) 1094 1528 { 1095 1529 /* loading the DB in-memory */ 1096 1530 sqlite3 *mem_db_handle; 1097 1531 sqlite3_backup *backup; 1098 1532 int ret; 1099 1533 ret = ................................................................................ 1122 1556 break; 1123 1557 } 1124 1558 ret = sqlite3_backup_finish (backup); 1125 1559 sqlite3_close (handle); 1126 1560 handle = mem_db_handle; 1127 1561 printf ("\nusing IN-MEMORY database\n"); 1128 1562 } 1129 - params.db_handle = handle; 1130 1563 1131 1564 /* creating SQL prepared statements */ 1132 - create_sql_stmts (¶ms, journal_off); 1565 + create_sql_stmts (¶ms); 1133 1566 1134 -/* parsing the input OSM-file */ 1135 - if (readosm_open (osm_path, &osm_handle) != READOSM_OK) 1567 +/* XML parsing */ 1568 + xml_file = fopen (osm_path, "rb"); 1569 + if (!xml_file) 1136 1570 { 1137 1571 fprintf (stderr, "cannot open %s\n", osm_path); 1138 - finalize_sql_stmts (¶ms); 1139 1572 sqlite3_close (handle); 1140 - readosm_close (osm_handle); 1573 + return -1; 1574 + } 1575 + parser = XML_ParserCreate (NULL); 1576 + if (!parser) 1577 + { 1578 + fprintf (stderr, "Couldn't allocate memory for parser\n"); 1579 + sqlite3_close (handle); 1141 1580 return -1; 1142 1581 } 1143 - if (readosm_parse 1144 - (osm_handle, ¶ms, consume_node, consume_way, 1145 - consume_relation) != READOSM_OK) 1582 + XML_SetUserData (parser, ¶ms); 1583 + XML_SetElementHandler (parser, start_tag, end_tag); 1584 + while (!done) 1146 1585 { 1147 - fprintf (stderr, "unrecoverable error while parsing %s\n", osm_path); 1148 - finalize_sql_stmts (¶ms); 1149 - sqlite3_close (handle); 1150 - readosm_close (osm_handle); 1151 - return -1; 1586 + len = fread (Buff, 1, BUFFSIZE, xml_file); 1587 + if (ferror (xml_file)) 1588 + { 1589 + fprintf (stderr, "XML Read error\n"); 1590 + sqlite3_close (handle); 1591 + return -1; 1592 + } 1593 + done = feof (xml_file); 1594 + if (!XML_Parse (parser, Buff, len, done)) 1595 + { 1596 + fprintf (stderr, "Parse error at line %d:\n%s\n", 1597 + (int) XML_GetCurrentLineNumber (parser), 1598 + XML_ErrorString (XML_GetErrorCode (parser))); 1599 + sqlite3_close (handle); 1600 + return -1; 1601 + } 1152 1602 } 1153 - readosm_close (osm_handle); 1603 + XML_ParserFree (parser); 1604 + fclose (xml_file); 1154 1605 1155 1606 /* finalizing SQL prepared statements */ 1156 1607 finalize_sql_stmts (¶ms); 1157 1608 1158 1609 /* printing out statistics */ 1159 1610 printf ("inserted %d nodes\n", params.wr_nodes); 1160 1611 printf ("\t%d tags\n", params.wr_node_tags);