From 54ed64e2828b034a6005a49fad648fe14ab00b05 Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Fri, 22 Mar 2013 12:37:59 -0600 Subject: [PATCH] - Add patch to fix namespace conflict with ncurses (bug #924467) - Add BR on bison due to patching dap.y --- netcdf-4.1.1-dap.patch | 421 +++++++++++++++++++++++++++++++++++++++++ netcdf.spec | 13 +- 2 files changed, 432 insertions(+), 2 deletions(-) create mode 100644 netcdf-4.1.1-dap.patch diff --git a/netcdf-4.1.1-dap.patch b/netcdf-4.1.1-dap.patch new file mode 100644 index 0000000..edcfb9d --- /dev/null +++ b/netcdf-4.1.1-dap.patch @@ -0,0 +1,421 @@ +diff -up netcdf-4.1.1/libncdap3/oc/daplex.c.dap netcdf-4.1.1/libncdap3/oc/daplex.c +--- netcdf-4.1.1/libncdap3/oc/daplex.c.dap 2013-03-22 11:43:28.933640833 -0600 ++++ netcdf-4.1.1/libncdap3/oc/daplex.c 2013-03-22 11:43:38.946596288 -0600 +@@ -2,6 +2,7 @@ + See the COPYRIGHT file for more information. */ + + #include "dapparselex.h" ++#include "daptab.h" + + #define URLCVT + +diff -up netcdf-4.1.1/libncdap3/oc/dapparse.c.dap netcdf-4.1.1/libncdap3/oc/dapparse.c +--- netcdf-4.1.1/libncdap3/oc/dapparse.c.dap 2010-04-01 17:33:24.000000000 -0600 ++++ netcdf-4.1.1/libncdap3/oc/dapparse.c 2013-03-22 11:43:14.710704133 -0600 +@@ -2,6 +2,7 @@ + See the COPYRIGHT file for more information. */ + + #include "dapparselex.h" ++#include "daptab.h" + + extern int dapparse(DAPparsestate*); + +@@ -19,7 +20,7 @@ static int check_int32(char* val, long* + + + Object +-datasetbody(DAPparsestate* state, Object name, Object decls) ++dap_datasetbody(DAPparsestate* state, Object name, Object decls) + { + OCnode* node = newocnode((char*)name,OC_Dataset,state); + node->subnodes = (OClist*)decls; +@@ -32,7 +33,7 @@ datasetbody(DAPparsestate* state, Object + } + + Object +-attributebody(DAPparsestate* state, Object attrlist) ++dap_attributebody(DAPparsestate* state, Object attrlist) + { + OCnode* node = newocnode(NULL,OC_Attributeset,state); + OCASSERT((state->root == NULL)); +@@ -45,7 +46,7 @@ attributebody(DAPparsestate* state, Obje + } + + Object +-errorbody(DAPparsestate* state, Object code, Object msg) ++dap_errorbody(DAPparsestate* state, Object code, Object msg) + { + state->svcerror = 1; + state->code = strdup((char*)code); +@@ -54,13 +55,13 @@ errorbody(DAPparsestate* state, Object c + } + + Object +-unrecognizedresponse(DAPparsestate* state) ++dap_unrecognizedresponse(DAPparsestate* state) + { +- return errorbody(state,"0",state->lexstate->input); ++ return dap_errorbody(state,"0",state->lexstate->input); + } + + Object +-declarations(DAPparsestate* state, Object decls, Object decl) ++dap_declarations(DAPparsestate* state, Object decls, Object decl) + { + OClist* alist = (OClist*)decls; + if(alist == NULL) +@@ -71,7 +72,7 @@ declarations(DAPparsestate* state, Objec + } + + Object +-arraydecls(DAPparsestate* state, Object arraydecls, Object arraydecl) ++dap_arraydecls(DAPparsestate* state, Object arraydecls, Object arraydecl) + { + OClist* alist = (OClist*)arraydecls; + if(alist == NULL) +@@ -82,7 +83,7 @@ arraydecls(DAPparsestate* state, Object + } + + Object +-arraydecl(DAPparsestate* state, Object name, Object size) ++dap_arraydecl(DAPparsestate* state, Object name, Object size) + { + long value; + OCnode* dim; +@@ -97,7 +98,7 @@ arraydecl(DAPparsestate* state, Object n + } + + Object +-attrlist(DAPparsestate* state, Object attrlist, Object attrtuple) ++dap_attrlist(DAPparsestate* state, Object attrlist, Object attrtuple) + { + OClist* alist = (OClist*)attrlist; + if(alist == NULL) +@@ -117,7 +118,7 @@ attrlist(DAPparsestate* state, Object at + } + + Object +-attrvalue(DAPparsestate* state, Object valuelist, Object value, Object etype) ++dap_attrvalue(DAPparsestate* state, Object valuelist, Object value, Object etype) + { + OClist* alist = (OClist*)valuelist; + if(alist == NULL) alist = oclistnew(); +@@ -128,7 +129,7 @@ attrvalue(DAPparsestate* state, Object v + } + + Object +-attribute(DAPparsestate* state, Object name, Object values, Object etype) ++dap_attribute(DAPparsestate* state, Object name, Object values, Object etype) + { + OCnode* att; + att = newocnode((char*)name,OC_Attribute,state); +@@ -138,7 +139,7 @@ attribute(DAPparsestate* state, Object n + } + + Object +-attrset(DAPparsestate* state, Object name, Object attributes) ++dap_attrset(DAPparsestate* state, Object name, Object attributes) + { + OCnode* attset; + attset = newocnode((char*)name,OC_Attributeset,state); +@@ -199,7 +200,7 @@ dimnameanon(char* basename, unsigned int + } + + Object +-makebase(DAPparsestate* state, Object name, Object etype, Object dimensions) ++dap_makebase(DAPparsestate* state, Object name, Object etype, Object dimensions) + { + OCnode* node; + node = newocnode((char*)name,OC_Primitive,state); +@@ -209,7 +210,7 @@ makebase(DAPparsestate* state, Object na + } + + Object +-makestructure(DAPparsestate* state, Object name, Object dimensions, Object fields) ++dap_makestructure(DAPparsestate* state, Object name, Object dimensions, Object fields) + { + OCnode* node; + char* dupname; +@@ -225,7 +226,7 @@ makestructure(DAPparsestate* state, Obje + } + + Object +-makesequence(DAPparsestate* state, Object name, Object members) ++dap_makesequence(DAPparsestate* state, Object name, Object members) + { + OCnode* node; + char* dupname; +@@ -240,7 +241,7 @@ makesequence(DAPparsestate* state, Objec + } + + Object +-makegrid(DAPparsestate* state, Object name, Object arraydecl, Object mapdecls) ++dap_makegrid(DAPparsestate* state, Object name, Object arraydecl, Object mapdecls) + { + OCnode* node; + /* Check for duplicate map names */ +diff -up netcdf-4.1.1/libncdap3/oc/dapparselex.h.dap netcdf-4.1.1/libncdap3/oc/dapparselex.h +--- netcdf-4.1.1/libncdap3/oc/dapparselex.h.dap 2010-04-01 17:33:24.000000000 -0600 ++++ netcdf-4.1.1/libncdap3/oc/dapparselex.h 2013-03-22 11:40:43.271384078 -0600 +@@ -6,12 +6,6 @@ + + #include "ocinternal.h" + #include "ocdebug.h" +-#ifdef USE_DAP +-/* To avoid "make distclean" wiping out dap.tab.h */ +-#include "daptab.h" +-#else +-#include "dap.tab.h" +-#endif + + #ifdef WIN32 + #define strcasecmp stricmp +@@ -73,26 +67,32 @@ typedef struct DAPparsestate { + extern int yylex (YYSTYPE*, DAPparsestate*); + extern int yyerror(DAPparsestate*,char*); + ++extern void dassetup(DAPparsestate* state); + extern void dap_parse_error(DAPparsestate*,const char *fmt, ...); +- +-extern Object datasetbody(DAPparsestate*,Object decls, Object name); +-extern Object declarations(DAPparsestate*,Object decls, Object decl); +-extern Object arraydecls(DAPparsestate*,Object arraydecls, Object arraydecl); +-extern Object arraydecl(DAPparsestate*,Object name, Object size); +- +-extern void attributesetup(DAPparsestate*); +-extern Object attributebody(DAPparsestate*,Object attrlist); +-extern Object attrlist(DAPparsestate*,Object attrlist, Object attrtuple); +-extern Object attribute(DAPparsestate*,Object name, Object value, Object etype); +-extern Object attrset(DAPparsestate*,Object name, Object attributes); +-extern Object attrvalue(DAPparsestate*,Object valuelist, Object value, Object etype); +- +-extern Object makebase(DAPparsestate*,Object name, Object etype, Object dimensions); +-extern Object makestructure(DAPparsestate*,Object name, Object dimensions, Object fields); +-extern Object makesequence(DAPparsestate*,Object name, Object members); +-extern Object makegrid(DAPparsestate*,Object name, Object arraydecl, Object mapdecls); +- +-extern Object errorbody(DAPparsestate*, Object code, Object msg); +-extern Object unrecognizedresponse(DAPparsestate*); ++extern Object dap_datasetbody(DAPparsestate*,Object decls, Object name); ++extern Object dap_declarations(DAPparsestate*,Object decls, Object decl); ++extern Object dap_arraydecls(DAPparsestate*,Object arraydecls, Object arraydecl); ++extern Object dap_arraydecl(DAPparsestate*,Object name, Object size); ++ ++extern void dap_attributesetup(DAPparsestate*); ++extern Object dap_attributebody(DAPparsestate*,Object attrlist); ++extern Object dap_attrlist(DAPparsestate*,Object attrlist, Object attrtuple); ++extern Object dap_attribute(DAPparsestate*,Object name, Object value, Object etype); ++extern Object dap_attrset(DAPparsestate*,Object name, Object attributes); ++extern Object dap_attrvalue(DAPparsestate*,Object valuelist, Object value, Object etype); ++ ++extern Object dap_makebase(DAPparsestate*,Object name, Object etype, Object dimensions); ++extern Object dap_makestructure(DAPparsestate*,Object name, Object dimensions, Object fields); ++extern Object dap_makesequence(DAPparsestate*,Object name, Object members); ++extern Object dap_makegrid(DAPparsestate*,Object name, Object arraydecl, Object mapdecls); ++ ++extern Object dap_errorbody(DAPparsestate*, Object code, Object msg); ++extern Object dap_unrecognizedresponse(DAPparsestate*); ++ ++/* Lexer entry points */ ++extern int daplex(YYSTYPE*, DAPparsestate*); ++extern void daplexinit(char* input, Lexstate** lexstatep); ++extern void daplexcleanup(Lexstate** lexstatep); ++extern void dapsetwordchars(Lexstate* lexstate, int kind); + + #endif /*DAPPARSELEX_H*/ +diff -up netcdf-4.1.1/libncdap3/oc/dap.y.dap netcdf-4.1.1/libncdap3/oc/dap.y +--- netcdf-4.1.1/libncdap3/oc/dap.y.dap 2010-04-01 17:33:23.000000000 -0600 ++++ netcdf-4.1.1/libncdap3/oc/dap.y 2013-03-22 11:34:25.689059778 -0600 +@@ -1,12 +1,10 @@ + /* Copyright 2009, UCAR/Unidata and OPeNDAP, Inc. + See the COPYRIGHT file for more information. */ + +-%{ +-#include "dapparselex.h" +-%} + %pure-parser + %lex-param {DAPparsestate* parsestate} + %parse-param {DAPparsestate* parsestate} ++%{#include "dapparselex.h"%} + + %token SCAN_ALIAS + %token SCAN_ARRAY +@@ -51,30 +49,30 @@ start: + | SCAN_ATTR dassetup attributebody + | SCAN_ERROR errorbody + | error +- {$$=unrecognizedresponse(parsestate);} ++ {$$=dap_unrecognizedresponse(parsestate);} + ; + + datasetbody: + '{' declarations '}' datasetname ';' +- {$$=datasetbody(parsestate,$4,$2);} ++ {$$=dap_datasetbody(parsestate,$4,$2);} + ; + + declarations: +- /* empty */ {$$=declarations(parsestate,null,null);} +- | declarations declaration {$$=declarations(parsestate,$1,$2);} ++ /* empty */ {$$=dap_declarations(parsestate,null,null);} ++ | declarations declaration {$$=dap_declarations(parsestate,$1,$2);} + ; + + /* 01/21/08: James says: no dimensions for grids or sequences */ + /* 05/08/09: James says: no duplicate map names */ + declaration: + base_type var_name array_decls ';' +- {$$=makebase(parsestate,$2,$1,$3);} ++ {$$=dap_makebase(parsestate,$2,$1,$3);} + | SCAN_STRUCTURE '{' declarations '}' var_name array_decls ';' +- {if(($$ = makestructure(parsestate,$5,$6,$3))==null) {YYABORT;}} ++ {if(($$ = dap_makestructure(parsestate,$5,$6,$3))==null) {YYABORT;}} + | SCAN_SEQUENCE '{' declarations '}' var_name ';' +- {if(($$ = makesequence(parsestate,$5,$3))==null) {YYABORT;}} ++ {if(($$ = dap_makesequence(parsestate,$5,$3))==null) {YYABORT;}} + | SCAN_GRID '{' SCAN_ARRAY ':' declaration SCAN_MAPS ':' declarations '}' var_name ';' +- {if(($$ = makegrid(parsestate,$10,$5,$8))==null) {YYABORT;}} ++ {if(($$ = dap_makegrid(parsestate,$10,$5,$8))==null) {YYABORT;}} + | error + {yyerror(parsestate,"Unrecognized type"); YYABORT;} + ; +@@ -93,13 +91,13 @@ base_type: + ; + + array_decls: +- /* empty */ {$$=arraydecls(parsestate,null,null);} +- | array_decls array_decl {$$=arraydecls(parsestate,$1,$2);} ++ /* empty */ {$$=dap_arraydecls(parsestate,null,null);} ++ | array_decls array_decl {$$=dap_arraydecls(parsestate,$1,$2);} + ; + + array_decl: +- '[' SCAN_WORD ']' {$$=arraydecl(parsestate,null,$2);} +- | '[' name '=' SCAN_WORD ']' {$$=arraydecl(parsestate,$2,$4);} ++ '[' SCAN_WORD ']' {$$=dap_arraydecl(parsestate,null,$2);} ++ | '[' name '=' SCAN_WORD ']' {$$=dap_arraydecl(parsestate,$2,$4);} + | error + {yyerror(parsestate,"Illegal dimension declaration"); YYABORT;} + ; +@@ -115,81 +113,81 @@ var_name: name {$$=$1;}; + dassetup: {dassetup(parsestate);} + + attributebody: +- '{' attr_list '}' {$$=attributebody(parsestate,$2);} ++ '{' attr_list '}' {$$=dap_attributebody(parsestate,$2);} + | error + {yyerror(parsestate,"Illegal DAS body"); YYABORT;} + ; + + attr_list: +- /* empty */ {$$=attrlist(parsestate,null,null);} +- | attr_list attribute {$$=attrlist(parsestate,$1,$2);} ++ /* empty */ {$$=dap_attrlist(parsestate,null,null);} ++ | attr_list attribute {$$=dap_attrlist(parsestate,$1,$2);} + ; + + attribute: + alias ';' {$$=null;} /* ignored */ + | SCAN_BYTE name bytes ';' +- {$$=attribute(parsestate,$2,$3,(Object)SCAN_BYTE);} ++ {$$=dap_attribute(parsestate,$2,$3,(Object)SCAN_BYTE);} + | SCAN_INT16 name int16 ';' +- {$$=attribute(parsestate,$2,$3,(Object)SCAN_INT16);} ++ {$$=dap_attribute(parsestate,$2,$3,(Object)SCAN_INT16);} + | SCAN_UINT16 name uint16 ';' +- {$$=attribute(parsestate,$2,$3,(Object)SCAN_UINT16);} ++ {$$=dap_attribute(parsestate,$2,$3,(Object)SCAN_UINT16);} + | SCAN_INT32 name int32 ';' +- {$$=attribute(parsestate,$2,$3,(Object)SCAN_INT32);} ++ {$$=dap_attribute(parsestate,$2,$3,(Object)SCAN_INT32);} + | SCAN_UINT32 name uint32 ';' +- {$$=attribute(parsestate,$2,$3,(Object)SCAN_UINT32);} ++ {$$=dap_attribute(parsestate,$2,$3,(Object)SCAN_UINT32);} + | SCAN_FLOAT32 name float32 ';' +- {$$=attribute(parsestate,$2,$3,(Object)SCAN_FLOAT32);} ++ {$$=dap_attribute(parsestate,$2,$3,(Object)SCAN_FLOAT32);} + | SCAN_FLOAT64 name float64 ';' +- {$$=attribute(parsestate,$2,$3,(Object)SCAN_FLOAT64);} ++ {$$=dap_attribute(parsestate,$2,$3,(Object)SCAN_FLOAT64);} + | SCAN_STRING name strs ';' +- {$$=attribute(parsestate,$2,$3,(Object)SCAN_STRING);} ++ {$$=dap_attribute(parsestate,$2,$3,(Object)SCAN_STRING);} + | SCAN_URL name urls ';' +- {$$=attribute(parsestate,$2,$3,(Object)SCAN_URL);} +- | name '{' attr_list '}' {$$=attrset(parsestate,$1,$3);} ++ {$$=dap_attribute(parsestate,$2,$3,(Object)SCAN_URL);} ++ | name '{' attr_list '}' {$$=dap_attrset(parsestate,$1,$3);} + | error + {yyerror(parsestate,"Illegal attribute"); YYABORT;} + ; + + bytes: +- SCAN_WORD {$$=attrvalue(parsestate,null,$1,(Object)SCAN_BYTE);} ++ SCAN_WORD {$$=dap_attrvalue(parsestate,null,$1,(Object)SCAN_BYTE);} + | bytes ',' SCAN_WORD +- {$$=attrvalue(parsestate,$1,$3,(Object)SCAN_BYTE);} ++ {$$=dap_attrvalue(parsestate,$1,$3,(Object)SCAN_BYTE);} + ; + int16: +- SCAN_WORD {$$=attrvalue(parsestate,null,$1,(Object)SCAN_INT16);} ++ SCAN_WORD {$$=dap_attrvalue(parsestate,null,$1,(Object)SCAN_INT16);} + | int16 ',' SCAN_WORD +- {$$=attrvalue(parsestate,$1,$3,(Object)SCAN_INT16);} ++ {$$=dap_attrvalue(parsestate,$1,$3,(Object)SCAN_INT16);} + ; + uint16: +- SCAN_WORD {$$=attrvalue(parsestate,null,$1,(Object)SCAN_UINT16);} ++ SCAN_WORD {$$=dap_attrvalue(parsestate,null,$1,(Object)SCAN_UINT16);} + | uint16 ',' SCAN_WORD +- {$$=attrvalue(parsestate,$1,$3,(Object)SCAN_UINT16);} ++ {$$=dap_attrvalue(parsestate,$1,$3,(Object)SCAN_UINT16);} + ; + int32: +- SCAN_WORD {$$=attrvalue(parsestate,null,$1,(Object)SCAN_INT32);} ++ SCAN_WORD {$$=dap_attrvalue(parsestate,null,$1,(Object)SCAN_INT32);} + | int32 ',' SCAN_WORD +- {$$=attrvalue(parsestate,$1,$3,(Object)SCAN_INT32);} ++ {$$=dap_attrvalue(parsestate,$1,$3,(Object)SCAN_INT32);} + ; + uint32: +- SCAN_WORD {$$=attrvalue(parsestate,null,$1,(Object)SCAN_UINT32);} +- | uint32 ',' SCAN_WORD {$$=attrvalue(parsestate,$1,$3,(Object)SCAN_UINT32);} ++ SCAN_WORD {$$=dap_attrvalue(parsestate,null,$1,(Object)SCAN_UINT32);} ++ | uint32 ',' SCAN_WORD {$$=dap_attrvalue(parsestate,$1,$3,(Object)SCAN_UINT32);} + ; + float32: +- SCAN_WORD {$$=attrvalue(parsestate,null,$1,(Object)SCAN_FLOAT32);} +- | float32 ',' SCAN_WORD {$$=attrvalue(parsestate,$1,$3,(Object)SCAN_FLOAT32);} ++ SCAN_WORD {$$=dap_attrvalue(parsestate,null,$1,(Object)SCAN_FLOAT32);} ++ | float32 ',' SCAN_WORD {$$=dap_attrvalue(parsestate,$1,$3,(Object)SCAN_FLOAT32);} + ; + float64: +- SCAN_WORD {$$=attrvalue(parsestate,null,$1,(Object)SCAN_FLOAT64);} +- | float64 ',' SCAN_WORD {$$=attrvalue(parsestate,$1,$3,(Object)SCAN_FLOAT64);} ++ SCAN_WORD {$$=dap_attrvalue(parsestate,null,$1,(Object)SCAN_FLOAT64);} ++ | float64 ',' SCAN_WORD {$$=dap_attrvalue(parsestate,$1,$3,(Object)SCAN_FLOAT64);} + ; + strs: +- str_or_id {$$=attrvalue(parsestate,null,$1,(Object)SCAN_STRING);} +- | strs ',' str_or_id {$$=attrvalue(parsestate,$1,$3,(Object)SCAN_STRING);} ++ str_or_id {$$=dap_attrvalue(parsestate,null,$1,(Object)SCAN_STRING);} ++ | strs ',' str_or_id {$$=dap_attrvalue(parsestate,$1,$3,(Object)SCAN_STRING);} + ; + + urls: +- url {$$=attrvalue(parsestate,null,$1,(Object)SCAN_URL);} +- | urls ',' url {$$=attrvalue(parsestate,$1,$3,(Object)SCAN_URL);} ++ url {$$=dap_attrvalue(parsestate,null,$1,(Object)SCAN_URL);} ++ | urls ',' url {$$=dap_attrvalue(parsestate,$1,$3,(Object)SCAN_URL);} + ; + + url: +@@ -239,7 +237,7 @@ name: + + errorbody: + '{' SCAN_CODE '=' SCAN_WORD ';' SCAN_MESSAGE '=' SCAN_WORD ';' '}' ';' +- {$$=errorbody(parsestate,$4,$8);} ++ {$$=dap_errorbody(parsestate,$4,$8);} + ; + + diff --git a/netcdf.spec b/netcdf.spec index 8ec0650..6e72689 100644 --- a/netcdf.spec +++ b/netcdf.spec @@ -1,19 +1,23 @@ Name: netcdf Version: 4.1.1 -Release: 3%{?dist}.2 +Release: 3%{?dist}.3 Summary: Libraries for the Unidata network Common Data Form Group: Applications/Engineering License: NetCDF URL: http://www.unidata.ucar.edu/software/netcdf/ -Source0: http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.1.1.tar.gz +Source0: http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-%{version}.tar.gz #Use pkgconfig in nc-config to avoid multi-lib issues Patch0: netcdf-4.1-beta2-pkgconfig.patch Patch1: netcdf-4.1.1-fflags.patch #Explicitly link libnetcdf.so agains -lhdf5_hl -lhdf5, reported upstream Patch2: netcdf-4.1.1-hdf5.patch +# Fix namespace conflict with ncurses (bug #924467) +Patch3: netcdf-4.1.1-dap.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +# bison is required because we patch dap.y in the dap patch +BuildRequires: bison BuildRequires: gcc-gfortran, gawk BuildRequires: hdf5-devel >= 1.8.4 BuildRequires: libcurl-devel @@ -83,6 +87,7 @@ This package contains the netCDF static libs. %patch0 -p1 -b .pkgconfig %patch1 -p1 -b .fflags %patch2 -p1 -b .hdf5 +%patch3 -p1 -b .dap %build @@ -167,6 +172,10 @@ fi %changelog +* Fri Mar 22 2013 Orion Poplawski - 4.1.1-3.3 +- Add patch to fix namespace conflict with ncurses (bug #924467) +- Add BR on bison due to patching dap.y + * Mon Dec 27 2010 Orion Poplawski - 4.1.1-3.2 - Don't use %%{_isa} in Requires for gcc-gfortran - not multilib in RHEL