From: Jakub Bogusz Date: Tue, 13 May 2014 14:13:28 +0000 (+0200) Subject: - updated to 1.11.0 X-Git-Tag: auto/th/gdal-1.11.0-1 X-Git-Url: http://git.pld-linux.org/?p=packages%2Fgdal.git;a=commitdiff_plain;h=0316feee17d6aaf76378d9c94b03675e4fbe4b46 - updated to 1.11.0 - updated format-security patch - added grass patch (allows to use default prefix for grass 5.7+) - added sse patch (use -msse only for SSE variants, just like AVX); allows to use SSE-capable binaries on non-SSE CPUs - added link patch (link ruby binding with just built libgdal instead of system one) - force PHP swig files rebuild (fixes build with php 5.5) --- diff --git a/gdal-bug-5284.patch b/gdal-bug-5284.patch deleted file mode 100644 index c01b55c..0000000 --- a/gdal-bug-5284.patch +++ /dev/null @@ -1,168 +0,0 @@ -Index: /trunk/gdal/configure -=================================================================== ---- /trunk/gdal/configure (revision 26534) -+++ /trunk/gdal/configure (revision 26582) -@@ -723,4 +723,5 @@ - II_SYSTEM - HAVE_INGRES -+MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION - MYSQL_LIB - MYSQL_INC -@@ -23308,4 +23309,32 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 - $as_echo "yes" >&6; } -+ -+ # Check if mysql headers declare load_defaults -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking load_defaults() in MySQL" >&5 -+$as_echo_n "checking load_defaults() in MySQL... " >&6; } -+ rm -f testmysql.* -+ echo '#include "my_global.h"' > testmysql.cpp -+ echo '#include "my_sys.h"' >> testmysql.cpp -+ echo 'int main(int argc, char** argv) { load_defaults(0, 0, 0, 0); return 0; } ' >> testmysql.cpp -+ if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} ${MYSQL_LIB} testmysql.cpp -o testmysql 2>&1`" ; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, found in my_sys.h" >&5 -+$as_echo "yes, found in my_sys.h" >&6; } -+ else -+ echo 'extern "C" void load_defaults(const char *conf_file, const char **groups, int *argc, char ***argv);' > testmysql.cpp -+ echo 'int main(int argc, char** argv) { load_defaults(0, 0, 0, 0); return 0; } ' >> testmysql.cpp -+ if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} ${MYSQL_LIB} testmysql.cpp -o testmysql 2>&1`" ; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, found in library but not in header" >&5 -+$as_echo "yes, found in library but not in header" >&6; } -+ MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION=yes -+ else -+ HAVE_MYSQL=no -+ MYSQL_LIB= -+ MYSQL_INC= -+ as_fn_error $? "Cannot find load_defaults()" "$LINENO" 5 -+ fi -+ fi -+ rm -f testmysql.* -+ rm -f testmysql -+ - ;; - esac -@@ -23317,4 +23346,6 @@ - - MYSQL_LIB=$MYSQL_LIB -+ -+MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION=$MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION - - -Index: /trunk/gdal/configure.in -=================================================================== ---- /trunk/gdal/configure.in (revision 26534) -+++ /trunk/gdal/configure.in (revision 26582) -@@ -2462,4 +2462,29 @@ - MYSQL_INC="`$MYSQL_CONFIG --include`" - AC_MSG_RESULT([yes]) -+ -+ # Check if mysql headers declare load_defaults -+ AC_MSG_CHECKING([load_defaults() in MySQL]) -+ rm -f testmysql.* -+ echo '#include "my_global.h"' > testmysql.cpp -+ echo '#include "my_sys.h"' >> testmysql.cpp -+ echo 'int main(int argc, char** argv) { load_defaults(0, 0, 0, 0); return 0; } ' >> testmysql.cpp -+ if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} ${MYSQL_LIB} testmysql.cpp -o testmysql 2>&1`" ; then -+ AC_MSG_RESULT([yes, found in my_sys.h]) -+ else -+ echo 'extern "C" void load_defaults(const char *conf_file, const char **groups, int *argc, char ***argv);' > testmysql.cpp -+ echo 'int main(int argc, char** argv) { load_defaults(0, 0, 0, 0); return 0; } ' >> testmysql.cpp -+ if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} ${MYSQL_LIB} testmysql.cpp -o testmysql 2>&1`" ; then -+ AC_MSG_RESULT([yes, found in library but not in header]) -+ MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION=yes -+ else -+ HAVE_MYSQL=no -+ MYSQL_LIB= -+ MYSQL_INC= -+ AC_MSG_ERROR([Cannot find load_defaults()]) -+ fi -+ fi -+ rm -f testmysql.* -+ rm -f testmysql -+ - ;; - esac -@@ -2469,4 +2494,5 @@ - AC_SUBST(MYSQL_INC,$MYSQL_INC) - AC_SUBST(MYSQL_LIB,$MYSQL_LIB) -+AC_SUBST(MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION,$MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION) - - dnl --------------------------------------------------------------------------- -Index: /trunk/gdal/ogr/ogrsf_frmts/mysql/GNUmakefile -=================================================================== ---- /trunk/gdal/ogr/ogrsf_frmts/mysql/GNUmakefile (revision 15888) -+++ /trunk/gdal/ogr/ogrsf_frmts/mysql/GNUmakefile (revision 26582) -@@ -8,4 +8,9 @@ - CPPFLAGS := -I.. -I../.. $(GDAL_INCLUDE) $(MYSQL_INC) $(CPPFLAGS) - -+ifeq ($(MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION),yes) -+CPPFLAGS += -DMYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION -+endif -+ -+ - default: $(O_OBJ:.o=.$(OBJ_EXT)) - -Index: /trunk/gdal/ogr/ogrsf_frmts/mysql/ogrmysqldatasource.cpp -=================================================================== ---- /trunk/gdal/ogr/ogrsf_frmts/mysql/ogrmysqldatasource.cpp (revision 26506) -+++ /trunk/gdal/ogr/ogrsf_frmts/mysql/ogrmysqldatasource.cpp (revision 26582) -@@ -37,4 +37,14 @@ - #include "cpl_string.h" - -+/* Recent versions of mysql no longer declare load_defaults() in my_sys.h */ -+/* but they still have it in the lib. Very fragile... */ -+#ifdef MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION -+extern "C" { -+int load_defaults(const char *conf_file, const char **groups, -+ int *argc, char ***argv); -+void free_defaults(char **argv); -+} -+#endif -+ - CPL_CVSID("$Id$"); - /************************************************************************/ -Index: /trunk/gdal/GDALmake.opt.in -=================================================================== ---- /trunk/gdal/GDALmake.opt.in (revision 26296) -+++ /trunk/gdal/GDALmake.opt.in (revision 26582) -@@ -127,4 +127,5 @@ - MYSQL_LIB = @MYSQL_LIB@ - MYSQL_INC = @MYSQL_INC@ -+MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION = @MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION@ - LIBS += $(MYSQL_LIB) - -Index: /trunk/gdal/configure -=================================================================== ---- /trunk/gdal/configure (revision 26582) -+++ /trunk/gdal/configure (revision 26583) -@@ -23317,5 +23317,5 @@ - echo '#include "my_sys.h"' >> testmysql.cpp - echo 'int main(int argc, char** argv) { load_defaults(0, 0, 0, 0); return 0; } ' >> testmysql.cpp -- if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} ${MYSQL_LIB} testmysql.cpp -o testmysql 2>&1`" ; then -+ if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} -o testmysql testmysql.cpp ${MYSQL_LIB} 2>&1`" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, found in my_sys.h" >&5 - $as_echo "yes, found in my_sys.h" >&6; } -@@ -23323,5 +23323,5 @@ - echo 'extern "C" void load_defaults(const char *conf_file, const char **groups, int *argc, char ***argv);' > testmysql.cpp - echo 'int main(int argc, char** argv) { load_defaults(0, 0, 0, 0); return 0; } ' >> testmysql.cpp -- if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} ${MYSQL_LIB} testmysql.cpp -o testmysql 2>&1`" ; then -+ if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} -o testmysql testmysql.cpp ${MYSQL_LIB} 2>&1`" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, found in library but not in header" >&5 - $as_echo "yes, found in library but not in header" >&6; } -Index: /trunk/gdal/configure.in -=================================================================== ---- /trunk/gdal/configure.in (revision 26582) -+++ /trunk/gdal/configure.in (revision 26583) -@@ -2469,10 +2469,10 @@ - echo '#include "my_sys.h"' >> testmysql.cpp - echo 'int main(int argc, char** argv) { load_defaults(0, 0, 0, 0); return 0; } ' >> testmysql.cpp -- if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} ${MYSQL_LIB} testmysql.cpp -o testmysql 2>&1`" ; then -+ if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} -o testmysql testmysql.cpp ${MYSQL_LIB} 2>&1`" ; then - AC_MSG_RESULT([yes, found in my_sys.h]) - else - echo 'extern "C" void load_defaults(const char *conf_file, const char **groups, int *argc, char ***argv);' > testmysql.cpp - echo 'int main(int argc, char** argv) { load_defaults(0, 0, 0, 0); return 0; } ' >> testmysql.cpp -- if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} ${MYSQL_LIB} testmysql.cpp -o testmysql 2>&1`" ; then -+ if test -z "`${CXX} ${CXXFLAGS} ${MYSQL_INC} -o testmysql testmysql.cpp ${MYSQL_LIB} 2>&1`" ; then - AC_MSG_RESULT([yes, found in library but not in header]) - MYSQL_NEEDS_LOAD_DEFAULTS_DECLARATION=yes diff --git a/gdal-format-security.patch b/gdal-format-security.patch index 2783f10..063e571 100644 --- a/gdal-format-security.patch +++ b/gdal-format-security.patch @@ -9,3 +9,40 @@ } } +--- gdal-1.11.0/ogr/ogrsf_frmts/sxf/ogrsxfdatasource.cpp.orig 2014-04-16 22:04:02.000000000 +0200 ++++ gdal-1.11.0/ogr/ogrsf_frmts/sxf/ogrsxfdatasource.cpp 2014-05-10 17:33:52.404601057 +0200 +@@ -459,7 +459,7 @@ + if (nEPSG == 0) + { + CPLError( CE_Warning, CPLE_NotSupported, +- CPLString().Printf("SXF. Vertical coordinate system (SXF index %ld) not supported", iVCS) ); ++ "SXF. Vertical coordinate system (SXF index %ld) not supported", iVCS ); + return; + } + +@@ -468,14 +468,14 @@ + if (eImportFromEPSGErr != OGRERR_NONE) + { + CPLError( CE_Warning, CPLE_None, +- CPLString().Printf("SXF. Vertical coordinate system (SXF index %ld, EPSG %d) import from EPSG error", iVCS, nEPSG) ); ++ "SXF. Vertical coordinate system (SXF index %ld, EPSG %d) import from EPSG error", iVCS, nEPSG ); + return; + } + + if (sr->IsVertical() != 1) + { + CPLError( CE_Warning, CPLE_None, +- CPLString().Printf("SXF. Coordinate system (SXF index %ld, EPSG %d) is not Vertical", iVCS, nEPSG) ); ++ "SXF. Coordinate system (SXF index %ld, EPSG %d) is not Vertical", iVCS, nEPSG ); + return; + } + +@@ -484,7 +484,7 @@ + if (eSetVertCSErr != OGRERR_NONE) + { + CPLError( CE_Warning, CPLE_None, +- CPLString().Printf("SXF. Vertical coordinate system (SXF index %ld, EPSG %d) set error", iVCS, nEPSG) ); ++ "SXF. Vertical coordinate system (SXF index %ld, EPSG %d) set error", iVCS, nEPSG ); + return; + } + } diff --git a/gdal-grass.patch b/gdal-grass.patch new file mode 100644 index 0000000..a27c814 --- /dev/null +++ b/gdal-grass.patch @@ -0,0 +1,43 @@ +--- gdal-1.11.0/configure.in.orig 2014-05-11 06:25:06.870303219 +0200 ++++ gdal-1.11.0/configure.in 2014-05-11 09:17:12.103421341 +0200 +@@ -718,25 +718,33 @@ + + # Check for GRASS 5.7.0 or later library use. + # TODO: separate libs for rasters and vectors +-if test "$with_grass" != "yes" -a "$with_grass" != "no" ; then ++if test "$with_grass" != "no" ; then + +- AC_CHECK_LIB(grass_gis,G_is_initialized,GRASS_SETTING=grass70+,GRASS_SETTING=no,-L$with_grass/lib -lgrass_datetime) ++ if test "$with_grass" = "yes" ; then ++ GRASS_I= ++ GRASS_L= ++ GRASS_GISBASE="$prefix" ++ else ++ GRASS_I="-I$with_grass/include" ++ GRASS_L="-L$with_grass/lib" ++ GRASS_GISBASE="$with_grass" ++ fi ++ AC_CHECK_LIB(grass_gis,G_is_initialized,GRASS_SETTING=grass70+,GRASS_SETTING=no,$GRASS_L -lgrass_datetime) + if test "$GRASS_SETTING" = "no" ; then +- AC_CHECK_LIB(grass_gis,G_asprintf,GRASS_SETTING=grass57+,GRASS_SETTING=no,-L$with_grass/lib -lgrass_datetime) ++ AC_CHECK_LIB(grass_gis,G_asprintf,GRASS_SETTING=grass57+,GRASS_SETTING=no,$GRASS_L -lgrass_datetime) + fi + + if test "$GRASS_SETTING" != "no" ; then + if test "$GRASS_SETTING" = "grass70+" ; then + G_RASTLIBS="-lgrass_raster -lgrass_imagery" + G_VECTLIBS="-lgrass_vector -lgrass_dig2 -lgrass_dgl -lgrass_rtree -lgrass_linkm -lgrass_dbmiclient -lgrass_dbmibase" +- LIBS="-L$with_grass/lib $G_VECTLIBS $G_RASTLIBS -lgrass_gproj -lgrass_gmath -lgrass_gis -lgrass_datetime $LIBS" ++ LIBS="$GRASS_L $G_VECTLIBS $G_RASTLIBS -lgrass_gproj -lgrass_gmath -lgrass_gis -lgrass_datetime $LIBS" + else + G_RASTLIBS="-lgrass_I" + G_VECTLIBS="-lgrass_vect -lgrass_dig2 -lgrass_dgl -lgrass_rtree -lgrass_linkm -lgrass_dbmiclient -lgrass_dbmibase" +- LIBS="-L$with_grass/lib $G_VECTLIBS $G_RASTLIBS -lgrass_gproj -lgrass_vask -lgrass_gmath -lgrass_gis -lgrass_datetime $LIBS" ++ LIBS="$GRASS_L $G_VECTLIBS $G_RASTLIBS -lgrass_gproj -lgrass_vask -lgrass_gmath -lgrass_gis -lgrass_datetime $LIBS" + fi +- GRASS_INCLUDE="-I$with_grass/include" +- GRASS_GISBASE="$with_grass" ++ GRASS_INCLUDE="$GRASS_I" + HAVE_GRASS=yes + else + AC_MSG_ERROR([--with-grass=$with_grass requested, but libraries not found!]) diff --git a/gdal-link.patch b/gdal-link.patch new file mode 100644 index 0000000..9a9f7e6 --- /dev/null +++ b/gdal-link.patch @@ -0,0 +1,29 @@ +--- gdal-1.11.0/swig/ruby/RubyMakefile.mk.orig 2014-05-11 22:02:00.429131553 +0200 ++++ gdal-1.11.0/swig/ruby/RubyMakefile.mk 2014-05-12 19:26:05.824192351 +0200 +@@ -64,10 +64,10 @@ + for i in $(RUBY_MODULES) ; do $(INSTALL) $$i $(DESTDIR)$(INSTALL_DIR) ; done + + $(RUBY_MODULES_MAC): %.bundle: %_wrap.o +- $(LD) $(LDFLAGS) $(LIBS) $(GDAL_SLIB_LINK) $(RUBY_LIB) $< -o $@ ++ $(LD) $(LDFLAGS) $(GDAL_SLIB_LINK) $(LIBS) $(RUBY_LIB) $< -o $@ + + $(RUBY_MODULES_LIN): %.so: %_wrap.o +- $(LD) $(LDFLAGS) $(LIBS) $(GDAL_SLIB_LINK) $(RUBY_LIB) $< -o $@ ++ $(LD) $(LDFLAGS) $(GDAL_SLIB_LINK) $(LIBS) $(RUBY_LIB) $< -o $@ + + %.o: %.cpp + $(CXX) $(CFLAGS) -fPIC $(GDAL_INCLUDE) $(RUBY_INCLUDE) -c $< +--- gdal-1.11.0/GDALmake.opt.in.orig 2014-04-16 22:04:49.000000000 +0200 ++++ gdal-1.11.0/GDALmake.opt.in 2014-05-12 19:25:43.287526155 +0200 +@@ -100,7 +100,11 @@ + + GDAL_LIB = $(GDAL_ROOT)/libgdal.a + GDAL_SLIB = $(GDAL_ROOT)/libgdal.$(SO_EXT) ++ifeq ($(HAVE_LIBTOOL), yes) ++GDAL_SLIB_LINK = $(GDAL_ROOT)/libgdal.la ++else + GDAL_SLIB_LINK = -L$(GDAL_ROOT) -lgdal ++endif + + # Mac OS X Framework definition + MACOSX_FRAMEWORK = @MACOSX_FRAMEWORK@ diff --git a/gdal-sse.patch b/gdal-sse.patch new file mode 100644 index 0000000..692affa --- /dev/null +++ b/gdal-sse.patch @@ -0,0 +1,561 @@ +--- gdal-1.11.0/alg/gdalgrid_priv.h.orig 2014-04-16 22:04:48.000000000 +0200 ++++ gdal-1.11.0/alg/gdalgrid_priv.h 2014-05-11 20:50:49.579220569 +0200 +@@ -51,6 +51,21 @@ + const float *pafZ; + } GDALGridExtraParameters; + ++#ifdef HAVE_SSE_AT_COMPILE_TIME ++int CPLHaveRuntimeSSE(); ++ ++CPLErr ++GDALGridInverseDistanceToAPower2NoSmoothingNoSearchSSE( ++ const void *poOptions, ++ GUInt32 nPoints, ++ const double *unused_padfX, ++ const double *unused_padfY, ++ const double *unused_padfZ, ++ double dfXPoint, double dfYPoint, ++ double *pdfValue, ++ void* hExtraParamsIn ); ++#endif ++ + #ifdef HAVE_AVX_AT_COMPILE_TIME + int CPLHaveRuntimeAVX(); + +--- gdal-1.11.0/alg/gdalgridsse.cpp.orig 1970-01-01 01:00:00.000000000 +0100 ++++ gdal-1.11.0/alg/gdalgridsse.cpp 2014-05-11 21:54:46.609140595 +0200 +@@ -0,0 +1,210 @@ ++#include "gdalgrid.h" ++#include "gdalgrid_priv.h" ++ ++#ifdef HAVE_SSE_AT_COMPILE_TIME ++#include ++ ++/************************************************************************/ ++/* CPLHaveRuntimeSSE() */ ++/************************************************************************/ ++ ++#define CPUID_SSE_EDX_BIT 25 ++ ++#if (defined(_M_X64) || defined(__x86_64)) ++ ++int CPLHaveRuntimeSSE() ++{ ++ return TRUE; ++} ++ ++#elif defined(__GNUC__) && defined(__i386__) ++ ++int CPLHaveRuntimeSSE() ++{ ++ int cpuinfo[4] = {0,0,0,0}; ++ GCC_CPUID(1, cpuinfo[0], cpuinfo[1], cpuinfo[2], cpuinfo[3]); ++ return (cpuinfo[3] & (1 << CPUID_SSE_EDX_BIT)) != 0; ++} ++ ++#elif defined(_MSC_VER) && defined(_M_IX86) ++ ++#if _MSC_VER <= 1310 ++static void inline __cpuid(int cpuinfo[4], int level) ++{ ++ __asm ++ { ++ push ebx ++ push esi ++ ++ mov esi,cpuinfo ++ mov eax,level ++ cpuid ++ mov dword ptr [esi], eax ++ mov dword ptr [esi+4],ebx ++ mov dword ptr [esi+8],ecx ++ mov dword ptr [esi+0Ch],edx ++ ++ pop esi ++ pop ebx ++ } ++} ++#else ++#include ++#endif ++ ++int CPLHaveRuntimeSSE() ++{ ++ int cpuinfo[4] = {0,0,0,0}; ++ __cpuid(cpuinfo, 1); ++ return (cpuinfo[3] & (1 << CPUID_SSE_EDX_BIT)) != 0; ++} ++ ++#else ++ ++int CPLHaveRuntimeSSE() ++{ ++ return FALSE; ++} ++#endif ++ ++/************************************************************************/ ++/* GDALGridInverseDistanceToAPower2NoSmoothingNoSearchSSE() */ ++/************************************************************************/ ++ ++CPLErr ++GDALGridInverseDistanceToAPower2NoSmoothingNoSearchSSE( ++ const void *poOptions, ++ GUInt32 nPoints, ++ const double *unused_padfX, ++ const double *unused_padfY, ++ const double *unused_padfZ, ++ double dfXPoint, double dfYPoint, ++ double *pdfValue, ++ void* hExtraParamsIn ) ++{ ++ size_t i = 0; ++ GDALGridExtraParameters* psExtraParams = (GDALGridExtraParameters*) hExtraParamsIn; ++ const float* pafX = psExtraParams->pafX; ++ const float* pafY = psExtraParams->pafY; ++ const float* pafZ = psExtraParams->pafZ; ++ ++ const float fEpsilon = 0.0000000000001f; ++ const float fXPoint = (float)dfXPoint; ++ const float fYPoint = (float)dfYPoint; ++ const __m128 xmm_small = _mm_load1_ps((float*)&fEpsilon); ++ const __m128 xmm_x = _mm_load1_ps((float*)&fXPoint); ++ const __m128 xmm_y = _mm_load1_ps((float*)&fYPoint); ++ __m128 xmm_nominator = _mm_setzero_ps(); ++ __m128 xmm_denominator = _mm_setzero_ps(); ++ int mask = 0; ++ ++#if defined(__x86_64) || defined(_M_X64) ++ /* This would also work in 32bit mode, but there are only 8 XMM registers */ ++ /* whereas we have 16 for 64bit */ ++#define LOOP_SIZE 8 ++ size_t nPointsRound = (nPoints / LOOP_SIZE) * LOOP_SIZE; ++ for ( i = 0; i < nPointsRound; i += LOOP_SIZE ) ++ { ++ __m128 xmm_rx = _mm_sub_ps(_mm_load_ps(pafX + i), xmm_x); /* rx = pafX[i] - fXPoint */ ++ __m128 xmm_rx_4 = _mm_sub_ps(_mm_load_ps(pafX + i + 4), xmm_x); ++ __m128 xmm_ry = _mm_sub_ps(_mm_load_ps(pafY + i), xmm_y); /* ry = pafY[i] - fYPoint */ ++ __m128 xmm_ry_4 = _mm_sub_ps(_mm_load_ps(pafY + i + 4), xmm_y); ++ __m128 xmm_r2 = _mm_add_ps(_mm_mul_ps(xmm_rx, xmm_rx), /* r2 = rx * rx + ry * ry */ ++ _mm_mul_ps(xmm_ry, xmm_ry)); ++ __m128 xmm_r2_4 = _mm_add_ps(_mm_mul_ps(xmm_rx_4, xmm_rx_4), ++ _mm_mul_ps(xmm_ry_4, xmm_ry_4)); ++ __m128 xmm_invr2 = _mm_rcp_ps(xmm_r2); /* invr2 = 1.0f / r2 */ ++ __m128 xmm_invr2_4 = _mm_rcp_ps(xmm_r2_4); ++ xmm_nominator = _mm_add_ps(xmm_nominator, /* nominator += invr2 * pafZ[i] */ ++ _mm_mul_ps(xmm_invr2, _mm_load_ps(pafZ + i))); ++ xmm_nominator = _mm_add_ps(xmm_nominator, ++ _mm_mul_ps(xmm_invr2_4, _mm_load_ps(pafZ + i + 4))); ++ xmm_denominator = _mm_add_ps(xmm_denominator, xmm_invr2); /* denominator += invr2 */ ++ xmm_denominator = _mm_add_ps(xmm_denominator, xmm_invr2_4); ++ mask = _mm_movemask_ps(_mm_cmplt_ps(xmm_r2, xmm_small)) | /* if( r2 < fEpsilon) */ ++ (_mm_movemask_ps(_mm_cmplt_ps(xmm_r2_4, xmm_small)) << 4); ++ if( mask ) ++ break; ++ } ++#else ++#define LOOP_SIZE 4 ++ size_t nPointsRound = (nPoints / LOOP_SIZE) * LOOP_SIZE; ++ for ( i = 0; i < nPointsRound; i += LOOP_SIZE ) ++ { ++ __m128 xmm_rx = _mm_sub_ps(_mm_load_ps((float*)pafX + i), xmm_x); /* rx = pafX[i] - fXPoint */ ++ __m128 xmm_ry = _mm_sub_ps(_mm_load_ps((float*)pafY + i), xmm_y); /* ry = pafY[i] - fYPoint */ ++ __m128 xmm_r2 = _mm_add_ps(_mm_mul_ps(xmm_rx, xmm_rx), /* r2 = rx * rx + ry * ry */ ++ _mm_mul_ps(xmm_ry, xmm_ry)); ++ __m128 xmm_invr2 = _mm_rcp_ps(xmm_r2); /* invr2 = 1.0f / r2 */ ++ xmm_nominator = _mm_add_ps(xmm_nominator, /* nominator += invr2 * pafZ[i] */ ++ _mm_mul_ps(xmm_invr2, _mm_load_ps((float*)pafZ + i))); ++ xmm_denominator = _mm_add_ps(xmm_denominator, xmm_invr2); /* denominator += invr2 */ ++ mask = _mm_movemask_ps(_mm_cmplt_ps(xmm_r2, xmm_small)); /* if( r2 < fEpsilon) */ ++ if( mask ) ++ break; ++ } ++#endif ++ ++ /* Find which i triggered r2 < fEpsilon */ ++ if( mask ) ++ { ++ for(int j = 0; j < LOOP_SIZE; j++ ) ++ { ++ if( mask & (1 << j) ) ++ { ++ (*pdfValue) = (pafZ)[i + j]; ++ return CE_None; ++ } ++ } ++ } ++ ++ /* Get back nominator and denominator values for XMM registers */ ++ float afNominator[4], afDenominator[4]; ++ _mm_storeu_ps(afNominator, xmm_nominator); ++ _mm_storeu_ps(afDenominator, xmm_denominator); ++ ++ float fNominator = afNominator[0] + afNominator[1] + ++ afNominator[2] + afNominator[3]; ++ float fDenominator = afDenominator[0] + afDenominator[1] + ++ afDenominator[2] + afDenominator[3]; ++ ++ /* Do the few remaining loop iterations */ ++ for ( ; i < nPoints; i++ ) ++ { ++ const float fRX = pafX[i] - fXPoint; ++ const float fRY = pafY[i] - fYPoint; ++ const float fR2 = ++ fRX * fRX + fRY * fRY; ++ ++ // If the test point is close to the grid node, use the point ++ // value directly as a node value to avoid singularity. ++ if ( fR2 < 0.0000000000001 ) ++ { ++ break; ++ } ++ else ++ { ++ const float fInvR2 = 1.0f / fR2; ++ fNominator += fInvR2 * pafZ[i]; ++ fDenominator += fInvR2; ++ } ++ } ++ ++ if( i != nPoints ) ++ { ++ (*pdfValue) = pafZ[i]; ++ } ++ else ++ if ( fDenominator == 0.0 ) ++ { ++ (*pdfValue) = ++ ((GDALGridInverseDistanceToAPowerOptions*)poOptions)->dfNoDataValue; ++ } ++ else ++ (*pdfValue) = fNominator / fDenominator; ++ ++ return CE_None; ++} ++ ++ ++#endif +--- gdal-1.11.0/alg/gdalgrid.cpp.orig 2014-04-16 22:04:48.000000000 +0200 ++++ gdal-1.11.0/alg/gdalgrid.cpp 2014-05-11 21:27:49.735840961 +0200 +@@ -36,10 +36,6 @@ + #include "cpl_multiproc.h" + #include "gdalgrid_priv.h" + +-#ifdef HAVE_SSE_AT_COMPILE_TIME +-#include +-#endif +- + CPL_CVSID("$Id: gdalgrid.cpp 27110 2014-03-28 21:29:20Z rouault $"); + + #define TO_RADIANS (3.14159265358979323846 / 180.0) +@@ -53,74 +49,6 @@ + #endif /* DBL_MAX */ + + /************************************************************************/ +-/* CPLHaveRuntimeSSE() */ +-/************************************************************************/ +- +-#ifdef HAVE_SSE_AT_COMPILE_TIME +- +-#define CPUID_SSE_EDX_BIT 25 +- +-#if (defined(_M_X64) || defined(__x86_64)) +- +-static int CPLHaveRuntimeSSE() +-{ +- return TRUE; +-} +- +-#elif defined(__GNUC__) && defined(__i386__) +- +-static int CPLHaveRuntimeSSE() +-{ +- int cpuinfo[4] = {0,0,0,0}; +- GCC_CPUID(1, cpuinfo[0], cpuinfo[1], cpuinfo[2], cpuinfo[3]); +- return (cpuinfo[3] & (1 << CPUID_SSE_EDX_BIT)) != 0; +-} +- +-#elif defined(_MSC_VER) && defined(_M_IX86) +- +-#if _MSC_VER <= 1310 +-static void inline __cpuid(int cpuinfo[4], int level) +-{ +- __asm +- { +- push ebx +- push esi +- +- mov esi,cpuinfo +- mov eax,level +- cpuid +- mov dword ptr [esi], eax +- mov dword ptr [esi+4],ebx +- mov dword ptr [esi+8],ecx +- mov dword ptr [esi+0Ch],edx +- +- pop esi +- pop ebx +- } +-} +-#else +-#include +-#endif +- +-static int CPLHaveRuntimeSSE() +-{ +- int cpuinfo[4] = {0,0,0,0}; +- __cpuid(cpuinfo, 1); +- return (cpuinfo[3] & (1 << CPUID_SSE_EDX_BIT)) != 0; +-} +- +-#else +- +-static int CPLHaveRuntimeSSE() +-{ +- return FALSE; +-} +- +-#endif +- +-#endif // HAVE_SSE_AT_COMPILE_TIME +- +-/************************************************************************/ + /* GDALGridGetPointBounds() */ + /************************************************************************/ + +@@ -394,148 +322,6 @@ + } + + /************************************************************************/ +-/* GDALGridInverseDistanceToAPower2NoSmoothingNoSearchSSE() */ +-/************************************************************************/ +- +-#ifdef HAVE_SSE_AT_COMPILE_TIME +- +-static CPLErr +-GDALGridInverseDistanceToAPower2NoSmoothingNoSearchSSE( +- const void *poOptions, +- GUInt32 nPoints, +- const double *unused_padfX, +- const double *unused_padfY, +- const double *unused_padfZ, +- double dfXPoint, double dfYPoint, +- double *pdfValue, +- void* hExtraParamsIn ) +-{ +- size_t i = 0; +- GDALGridExtraParameters* psExtraParams = (GDALGridExtraParameters*) hExtraParamsIn; +- const float* pafX = psExtraParams->pafX; +- const float* pafY = psExtraParams->pafY; +- const float* pafZ = psExtraParams->pafZ; +- +- const float fEpsilon = 0.0000000000001f; +- const float fXPoint = (float)dfXPoint; +- const float fYPoint = (float)dfYPoint; +- const __m128 xmm_small = _mm_load1_ps((float*)&fEpsilon); +- const __m128 xmm_x = _mm_load1_ps((float*)&fXPoint); +- const __m128 xmm_y = _mm_load1_ps((float*)&fYPoint); +- __m128 xmm_nominator = _mm_setzero_ps(); +- __m128 xmm_denominator = _mm_setzero_ps(); +- int mask = 0; +- +-#if defined(__x86_64) || defined(_M_X64) +- /* This would also work in 32bit mode, but there are only 8 XMM registers */ +- /* whereas we have 16 for 64bit */ +-#define LOOP_SIZE 8 +- size_t nPointsRound = (nPoints / LOOP_SIZE) * LOOP_SIZE; +- for ( i = 0; i < nPointsRound; i += LOOP_SIZE ) +- { +- __m128 xmm_rx = _mm_sub_ps(_mm_load_ps(pafX + i), xmm_x); /* rx = pafX[i] - fXPoint */ +- __m128 xmm_rx_4 = _mm_sub_ps(_mm_load_ps(pafX + i + 4), xmm_x); +- __m128 xmm_ry = _mm_sub_ps(_mm_load_ps(pafY + i), xmm_y); /* ry = pafY[i] - fYPoint */ +- __m128 xmm_ry_4 = _mm_sub_ps(_mm_load_ps(pafY + i + 4), xmm_y); +- __m128 xmm_r2 = _mm_add_ps(_mm_mul_ps(xmm_rx, xmm_rx), /* r2 = rx * rx + ry * ry */ +- _mm_mul_ps(xmm_ry, xmm_ry)); +- __m128 xmm_r2_4 = _mm_add_ps(_mm_mul_ps(xmm_rx_4, xmm_rx_4), +- _mm_mul_ps(xmm_ry_4, xmm_ry_4)); +- __m128 xmm_invr2 = _mm_rcp_ps(xmm_r2); /* invr2 = 1.0f / r2 */ +- __m128 xmm_invr2_4 = _mm_rcp_ps(xmm_r2_4); +- xmm_nominator = _mm_add_ps(xmm_nominator, /* nominator += invr2 * pafZ[i] */ +- _mm_mul_ps(xmm_invr2, _mm_load_ps(pafZ + i))); +- xmm_nominator = _mm_add_ps(xmm_nominator, +- _mm_mul_ps(xmm_invr2_4, _mm_load_ps(pafZ + i + 4))); +- xmm_denominator = _mm_add_ps(xmm_denominator, xmm_invr2); /* denominator += invr2 */ +- xmm_denominator = _mm_add_ps(xmm_denominator, xmm_invr2_4); +- mask = _mm_movemask_ps(_mm_cmplt_ps(xmm_r2, xmm_small)) | /* if( r2 < fEpsilon) */ +- (_mm_movemask_ps(_mm_cmplt_ps(xmm_r2_4, xmm_small)) << 4); +- if( mask ) +- break; +- } +-#else +-#define LOOP_SIZE 4 +- size_t nPointsRound = (nPoints / LOOP_SIZE) * LOOP_SIZE; +- for ( i = 0; i < nPointsRound; i += LOOP_SIZE ) +- { +- __m128 xmm_rx = _mm_sub_ps(_mm_load_ps((float*)pafX + i), xmm_x); /* rx = pafX[i] - fXPoint */ +- __m128 xmm_ry = _mm_sub_ps(_mm_load_ps((float*)pafY + i), xmm_y); /* ry = pafY[i] - fYPoint */ +- __m128 xmm_r2 = _mm_add_ps(_mm_mul_ps(xmm_rx, xmm_rx), /* r2 = rx * rx + ry * ry */ +- _mm_mul_ps(xmm_ry, xmm_ry)); +- __m128 xmm_invr2 = _mm_rcp_ps(xmm_r2); /* invr2 = 1.0f / r2 */ +- xmm_nominator = _mm_add_ps(xmm_nominator, /* nominator += invr2 * pafZ[i] */ +- _mm_mul_ps(xmm_invr2, _mm_load_ps((float*)pafZ + i))); +- xmm_denominator = _mm_add_ps(xmm_denominator, xmm_invr2); /* denominator += invr2 */ +- mask = _mm_movemask_ps(_mm_cmplt_ps(xmm_r2, xmm_small)); /* if( r2 < fEpsilon) */ +- if( mask ) +- break; +- } +-#endif +- +- /* Find which i triggered r2 < fEpsilon */ +- if( mask ) +- { +- for(int j = 0; j < LOOP_SIZE; j++ ) +- { +- if( mask & (1 << j) ) +- { +- (*pdfValue) = (pafZ)[i + j]; +- return CE_None; +- } +- } +- } +- +- /* Get back nominator and denominator values for XMM registers */ +- float afNominator[4], afDenominator[4]; +- _mm_storeu_ps(afNominator, xmm_nominator); +- _mm_storeu_ps(afDenominator, xmm_denominator); +- +- float fNominator = afNominator[0] + afNominator[1] + +- afNominator[2] + afNominator[3]; +- float fDenominator = afDenominator[0] + afDenominator[1] + +- afDenominator[2] + afDenominator[3]; +- +- /* Do the few remaining loop iterations */ +- for ( ; i < nPoints; i++ ) +- { +- const float fRX = pafX[i] - fXPoint; +- const float fRY = pafY[i] - fYPoint; +- const float fR2 = +- fRX * fRX + fRY * fRY; +- +- // If the test point is close to the grid node, use the point +- // value directly as a node value to avoid singularity. +- if ( fR2 < 0.0000000000001 ) +- { +- break; +- } +- else +- { +- const float fInvR2 = 1.0f / fR2; +- fNominator += fInvR2 * pafZ[i]; +- fDenominator += fInvR2; +- } +- } +- +- if( i != nPoints ) +- { +- (*pdfValue) = pafZ[i]; +- } +- else +- if ( fDenominator == 0.0 ) +- { +- (*pdfValue) = +- ((GDALGridInverseDistanceToAPowerOptions*)poOptions)->dfNoDataValue; +- } +- else +- (*pdfValue) = fNominator / fDenominator; +- +- return CE_None; +-} +-#endif // HAVE_SSE_AT_COMPILE_TIME +- +-/************************************************************************/ + /* GDALGridMovingAverage() */ + /************************************************************************/ + +@@ -1766,7 +1552,9 @@ + pabyX = pabyY = pabyZ = NULL; + } + } ++# ifdef HAVE_SSE_AT_COMPILE_TIME + else ++# endif + #endif + + #ifdef HAVE_SSE_AT_COMPILE_TIME +--- gdal-1.11.0/alg/GNUmakefile.orig 2014-04-16 22:04:48.000000000 +0200 ++++ gdal-1.11.0/alg/GNUmakefile 2014-05-11 21:56:55.699137906 +0200 +@@ -16,6 +16,10 @@ + CPPFLAGS := -DHAVE_AVX_AT_COMPILE_TIME $(CPPFLAGS) + endif + ++ifeq ($(HAVE_SSE_AT_COMPILE_TIME),yes) ++CPPFLAGS := -DHAVE_SSE_AT_COMPILE_TIME $(CPPFLAGS) ++endif ++ + ifeq ($(HAVE_GEOS),yes) + CPPFLAGS := -DHAVE_GEOS=1 $(GEOS_CFLAGS) $(CPPFLAGS) + endif +@@ -26,11 +30,14 @@ + + CPPFLAGS := $(GDAL_INCLUDE) $(CPPFLAGS) $(OPENCL_FLAGS) + +-default: $(OBJ:.o=.$(OBJ_EXT)) gdalgridavx.$(OBJ_EXT) ++default: $(OBJ:.o=.$(OBJ_EXT)) gdalgridavx.$(OBJ_EXT) gdalgridsse.$(OBJ_EXT) + + gdalgridavx.$(OBJ_EXT): gdalgridavx.cpp + $(CXX) $(CXXFLAGS) $(AVXFLAGS) $(CPPFLAGS) -c -o $@ $< + ++gdalgridsse.$(OBJ_EXT): gdalgridsse.cpp ++ $(CXX) $(CXXFLAGS) $(SSEFLAGS) $(CPPFLAGS) -c -o $@ $< ++ + clean: + $(RM) *.o $(O_OBJ) + +--- gdal-1.11.0/configure.in.orig 2014-05-11 20:11:46.272602746 +0200 ++++ gdal-1.11.0/configure.in 2014-05-11 22:00:20.125800312 +0200 +@@ -240,12 +240,12 @@ + echo '#endif' >> detectsse.cpp + if test -z "`${CXX} ${CXXFLAGS} -o detectsse detectsse.cpp 2>&1`" ; then + AC_MSG_RESULT([yes]) +- SSEFLAGS="-DHAVE_SSE_AT_COMPILE_TIME" ++ SSEFLAGS="" + HAVE_SSE_AT_COMPILE_TIME=yes + else + if test -z "`${CXX} ${CXXFLAGS} -msse -o detectsse detectsse.cpp 2>&1`" ; then + AC_MSG_RESULT([yes]) +- SSEFLAGS="-msse -DHAVE_SSE_AT_COMPILE_TIME" ++ SSEFLAGS="-msse" + HAVE_SSE_AT_COMPILE_TIME=yes + else + AC_MSG_RESULT([no]) +@@ -279,16 +279,14 @@ + esac + fi + +- if test "$HAVE_SSE_AT_COMPILE_TIME" = "yes"; then +- CFLAGS="$CFLAGS $SSEFLAGS" +- CXXFLAGS="$CXXFLAGS $SSEFLAGS" +- fi +- + rm -f detectsse* + else + AC_MSG_RESULT([no]) + fi + ++AC_SUBST(SSEFLAGS,$SSEFLAGS) ++AC_SUBST(HAVE_SSE_AT_COMPILE_TIME,$HAVE_SSE_AT_COMPILE_TIME) ++ + dnl --------------------------------------------------------------------------- + dnl Check AVX availability + dnl --------------------------------------------------------------------------- +--- gdal-1.11.0/GDALmake.opt.in.orig 2014-05-12 19:27:07.164191074 +0200 ++++ gdal-1.11.0/GDALmake.opt.in 2014-05-12 20:39:04.850767745 +0200 +@@ -37,6 +37,8 @@ + $(PCIDSK_LIB) $(RASDAMAN_LIB) $(CHARLS_LIB) $(SOSI_LIB) \ + $(OPENCL_LIB) $(JVM_LIB) $(LIBICONV) $(FGDB_LIB) $(LIBXML2_LIB) + ++SSEFLAGS = @SSEFLAGS@ ++HAVE_SSE_AT_COMPILE_TIME = @HAVE_SSE_AT_COMPILE_TIME@ + AVXFLAGS = @AVXFLAGS@ + HAVE_AVX_AT_COMPILE_TIME = @HAVE_AVX_AT_COMPILE_TIME@ + diff --git a/gdal.spec b/gdal.spec index 8988a60..2519269 100644 --- a/gdal.spec +++ b/gdal.spec @@ -7,6 +7,8 @@ # - libkml (1.3.0 needed, not released yet) # - wait for newer pcidsk, switch to external again # - csharp, java +# - DDS (--with-dds, BR [lib]crunch: http://code.google.com/p/crunch/) +# - SOSI (--with-sosi, BR: libfyba libfygm libfyut: https://github.com/kartverket/fyba) # - additional, proprietary(?) formats support: # - FMEObjects (http://www.safe.com/support/support-resources/fme-downloads/) # - ESRI FileGDBAPI (http://resources.arcgis.com/content/geodatabases/10.0/file-gdb-api) @@ -16,15 +18,17 @@ # - MSG/EUMETSAT (http://www.eumetsat.int/Home/Main/DataAccess/SupportSoftwareTools/index.htm) # - Oracle/OCI >= 10.0.1 (for georaster); Oracle/OCI >= 8.1.7 (as DB) # - Ingres (--with-ingres=/path) -# - Informix DB +# - Informix DB (--with-idb) # - DWGdirect (members only? http://www.opendwg.org/) # - ESRI SDE (http://www.esri.com/software/arcgis/arcsde/index.html) # # Conditional build: %bcond_without armadillo # Armadillo support for faster TPS transform %bcond_without epsilon # EPSILON wavelet compression support +%bcond_with grass # GRASS support (note: dependency loop) %bcond_without gta # GTA format support %bcond_without mysql # MySQL DB support +%bcond_with oci # ORACLE OCI DB and Georaster support %bcond_without odbc # ODBC DB support %bcond_without opencl # OpenCL (GPU) support %bcond_without openjpeg # OpenJPEG 2 (JPEG2000) support @@ -33,7 +37,7 @@ %bcond_without spatialite # SpatiaLite support %bcond_without xerces # Xerces support %bcond_without java # Java and MDB support -%bcond_with php # PHP binding +%bcond_without php # PHP binding %bcond_without ruby # Ruby binding %if %{with podofo} @@ -42,18 +46,20 @@ Summary: Geospatial Data Abstraction Library Summary(pl.UTF-8): Biblioteka abstrakcji danych dotyczących powierzchni Ziemi Name: gdal -Version: 1.10.1 -Release: 6 +Version: 1.11.0 +Release: 1 License: BSD-like Group: Libraries Source0: http://download.osgeo.org/gdal/%{version}/%{name}-%{version}.tar.xz -# Source0-md5: f354c614aea76e5630e4edbf06e5c292 +# Source0-md5: 31f2c4a7230b40e5fdc3cf12a100f96b Patch0: %{name}-perl.patch Patch1: %{name}-python_install.patch Patch2: %{name}-php.patch Patch3: %{name}-fpic.patch Patch4: %{name}-format-security.patch -Patch5: gdal-bug-5284.patch +Patch5: %{name}-grass.patch +Patch6: %{name}-sse.patch +Patch7: %{name}-link.patch URL: http://www.gdal.org/ %{?with_opencl:BuildRequires: OpenCL-devel >= 1.0} %{?with_armadillo:BuildRequires: armadillo-devel} @@ -65,13 +71,16 @@ BuildRequires: doxygen >= 1.4.2 %{?with_epsilon:BuildRequires: epsilon-compressor-devel} BuildRequires: expat-devel >= 1.95.0 BuildRequires: freexl-devel >= 1.0 -BuildRequires: geos-devel >= 2.2.0 +BuildRequires: gcc >= 6:4.1 +BuildRequires: geos-devel >= 3.1.0 BuildRequires: giflib-devel >= 4.0 +%{?with_grass:BuildRequires: grass-devel >= 5.7} BuildRequires: hdf-devel >= 4.0 BuildRequires: hdf5-devel BuildRequires: jasper-devel %{?with_java:BuildRequires: jdk} %{?with_java:BuildRequires: jpackage-utils} +BuildRequires: json-c-devel >= 0.11 BuildRequires: libcsf-devel BuildRequires: libdap-devel >= 3.10 BuildRequires: libgeotiff-devel >= 1.2.1 @@ -85,11 +94,13 @@ BuildRequires: libtiff-devel >= 4.0 BuildRequires: libtool BuildRequires: libuuid-devel BuildRequires: libwebp-devel -BuildRequires: libxml2-devel +BuildRequires: libxml2-devel >= 2 %{?with_mysql:BuildRequires: mysql-devel} BuildRequires: netcdf-devel >= 4.1 BuildRequires: ogdi-devel >= 3.1 %{?with_openjpeg:BuildRequires: openjpeg2-devel >= 2.0.0-2} +# 8.1.7 for DB support, 10.0.1 for georaster +%{?with_oci:BuildRequires: oracle-instantclient-devel >= 10.0.1} #BuildRequires: pcidsk-devel > 0.3 BuildRequires: perl-devel %{?with_php:BuildRequires: php-devel} @@ -109,6 +120,7 @@ BuildRequires: rpmbuild(macros) >= 1.344 BuildRequires: sed >= 4.0 BuildRequires: sqlite3-devel >= 3.0.0 BuildRequires: swig-perl +BuildRequires: swig-php >= 2.0.12-2 BuildRequires: swig-python >= 1.3 %{?with_ruby:BuildRequires: swig-ruby} BuildRequires: texlive-dvips @@ -118,7 +130,7 @@ BuildRequires: texlive-latex BuildRequires: xz-devel BuildRequires: zlib-devel >= 1.1.4 Requires: freexl >= 1.0 -Requires: geos >= 2.2.0 +Requires: geos >= 3.1.0 Requires: libgeotiff >= 1.2.1 Requires: libpng >= 2:1.2.8 Requires: libtiff >= 4.0 @@ -152,11 +164,12 @@ Requires: curl-devel %{?with_epsilon:Requires: epsilon-compressor-devel} Requires: expat-devel >= 1.95.0 Requires: freexl-devel >= 1.0 -Requires: geos-devel >= 2.2.0 +Requires: geos-devel >= 3.1.0 Requires: giflib-devel >= 4.0 Requires: hdf-devel >= 4.0 Requires: hdf5-devel Requires: jasper-devel +Requires: json-c-devel >= 0.11 Requires: libcsf-devel Requires: libdap-devel >= 3.10 Requires: libgeotiff-devel >= 1.2.1 @@ -168,7 +181,7 @@ Requires: libstdc++-devel Requires: libtiff-devel >= 4.0 Requires: libuuid-devel Requires: libwebp-devel -Requires: libxml2-devel +Requires: libxml2-devel >= 2 %{?with_mysql:Requires: mysql-devel} Requires: netcdf-devel >= 4 Requires: ogdi-devel >= 3.1 @@ -255,18 +268,24 @@ osr. %prep %setup -q -%{__aclocal} -%{__autoconf} %patch0 -p1 %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 -%patch5 -p3 - -# need to regenerate (old ones don't support perl 5.10) -%{__rm} swig/perl/{gdal_wrap.cpp,gdalconst_wrap.c,ogr_wrap.cpp,osr_wrap.cpp} - +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 + +# need to regenerate (old ones don't support perl 5.10 or php 5.5) +%{__rm} swig/{perl,php}/{gdal_wrap.cpp,gdalconst_wrap.c,ogr_wrap.cpp,osr_wrap.cpp} + +%{__sed} -i \ + -e 's/^CC=gcc/CC=%{__cc}/' \ + -e 's/^CXX=g++/CXX=%{__cxx}/' \ + -e 's/^CFLAGS=-fpic/CFLAGS=%{rpmcflags} -fPIC/' \ + -e 's/^LDFLAGS=-shared/LDFLAGS=%{rpmldflags} -shared/' \ + swig/php/GNUmakefile # Build with fPIC to allow Ruby bindings # Xcompiler should normally achieve that -- http://trac.osgeo.org/gdal/ticket/3978 # http://trac.osgeo.org/gdal/ticket/1994 @@ -295,12 +314,14 @@ sed -i -e 's#^mandir=.*##g' configure.in --with-dods-root=/usr \ %{?with_armadillo:--with-armadillo} \ %{?with_epsilon:--with-epsilon} \ + %{?with_grass:--with-grass} \ %{!?with_gta:--without-gta} \ --with-hide-internal-symbols \ %{?with_java:--with-java=%{java_home}} \ --with-liblzma \ %{?with_java:--with-mdb --with-jvm-lib-add-rpath} \ %{?with_mysql:--with-mysql} \ + %{?with_oci:--with-oci --with-oci-include=/usr/include/oracle/client --with-oci-lib=%{_libdir}} \ %{?with_opencl:--with-opencl} \ --with-perl \ %{?with_php:--with-php} \ @@ -314,7 +335,6 @@ sed -i -e 's#^mandir=.*##g' configure.in %{?with_xerces:--with-xerces} \ --with-xerces-inc=/usr/include/xercesc \ --with-xerces-lib="-lxerces-c" \ - --without-grass \ --without-libgrass # --with-rasdaman # --with-pcidsk=/usr (needs > 0.3) @@ -369,8 +389,8 @@ EOF %{__rm} $RPM_BUILD_ROOT%{perl_vendorarch}/auto/Geo/OSR/.packlist # some doxygen trash -%{__rm} $RPM_BUILD_ROOT%{_bindir}/gdalmove.dox -%{__rm} $RPM_BUILD_ROOT%{_bindir}/gdal_{edit,fillnodata,polygonize,proximity,sieve}.dox +%{__rm} $RPM_BUILD_ROOT%{_bindir}/gdal{compare,move}.dox +%{__rm} $RPM_BUILD_ROOT%{_bindir}/gdal_{calc,edit,fillnodata,polygonize,proximity,sieve}.dox %clean rm -rf $RPM_BUILD_ROOT @@ -403,6 +423,7 @@ rm -rf $RPM_BUILD_ROOT %attr(755,root,root) %{_bindir}/gdaladdo %attr(755,root,root) %{_bindir}/gdalbuildvrt %attr(755,root,root) %{_bindir}/gdalchksum.py +%attr(755,root,root) %{_bindir}/gdalcompare.py %attr(755,root,root) %{_bindir}/gdaldem %attr(755,root,root) %{_bindir}/gdalenhance %attr(755,root,root) %{_bindir}/gdalident.py @@ -420,6 +441,7 @@ rm -rf $RPM_BUILD_ROOT %attr(755,root,root) %{_bindir}/nearblack %attr(755,root,root) %{_bindir}/ogr2ogr %attr(755,root,root) %{_bindir}/ogrinfo +%attr(755,root,root) %{_bindir}/ogrlineref %attr(755,root,root) %{_bindir}/ogrtindex %attr(755,root,root) %{_bindir}/pct2rgb.py %attr(755,root,root) %{_bindir}/rgb2pct.py @@ -428,6 +450,7 @@ rm -rf $RPM_BUILD_ROOT %attr(755,root,root) %ghost %{_libdir}/libgdal.so.1 %{_datadir}/gdal %{_mandir}/man1/gdal2tiles.1* +%{_mandir}/man1/gdal_calc.1* %{_mandir}/man1/gdal_contour.1* %{_mandir}/man1/gdal_edit.1* %{_mandir}/man1/gdal_fillnodata.1* @@ -442,6 +465,7 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man1/gdal_utilities.1* %{_mandir}/man1/gdaladdo.1* %{_mandir}/man1/gdalbuildvrt.1* +%{_mandir}/man1/gdalcompare.1* %{_mandir}/man1/gdaldem.1* %{_mandir}/man1/gdalinfo.1* %{_mandir}/man1/gdallocationinfo.1* @@ -455,6 +479,7 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man1/ogr2ogr.1* %{_mandir}/man1/ogr_utilities.1* %{_mandir}/man1/ogrinfo.1* +%{_mandir}/man1/ogrlineref.1* %{_mandir}/man1/ogrtindex.1* %{_mandir}/man1/pct2rgb.1* %{_mandir}/man1/rgb2pct.1* @@ -465,6 +490,7 @@ rm -rf $RPM_BUILD_ROOT %attr(755,root,root) %{_bindir}/gdal-config %attr(755,root,root) %{_libdir}/libgdal.so %{_libdir}/libgdal.la +%{_pkgconfigdir}/gdal.pc %{_includedir}/cpl_*.h %{_includedir}/cplkeywordparser.h %{_includedir}/gdal*.h