Patch fixing build error and warnings. Error consisted of redefining
strcasestr function from string.h. Warnings consisted of deprecated conversions
of string constants to char*, using '%llu' for type uint64_t (which on 64 bit
systems, is defined as unsigned long int by stdint.h), and using '==' for
equality of two strings.

Patch originally from Debian.

Upstream-Status: Pending

==========================================================================
--- a/common/mp4v2/mpeg4ip.h
+++ b/common/mp4v2/mpeg4ip.h
@@ -120,14 +120,6 @@
 #endif
 #include <sys/param.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-char *strcasestr(const char *haystack, const char *needle);
-#ifdef __cplusplus
-}
-#endif
-
 #define OPEN_RDWR O_RDWR
 #define OPEN_CREAT O_CREAT 
 #define OPEN_RDONLY O_RDONLY
@@ -135,7 +127,6 @@
 #define closesocket close
 #define IOSBINARY ios::bin
 
-#if SIZEOF_LONG == 8
 #define MAX_UINT64 -1LU
 #define D64F "ld"
 #define U64F  "lu"
@@ -143,15 +134,6 @@
 
 #define TO_D64(a) (a##L)
 #define TO_U64(a) (a##LU)
-#else
-#define MAX_UINT64 -1LLU
-#define D64F "lld"
-#define U64F  "llu"
-#define X64F "llx"
-
-#define TO_D64(a) (a##LL)
-#define TO_U64(a) (a##LLU)
-#endif
 
 #ifdef HAVE_FPOS_T___POS
 #define FPOS_TO_VAR(fpos, typed, var) (var) = (typed)((fpos).__pos)
--- a/configure.in
+++ b/configure.in
@@ -4,6 +4,9 @@
 AM_INIT_AUTOMAKE
 
 AM_CONFIG_HEADER(config.h)
+AH_TOP([#ifndef CONFIG_H
+#define CONFIG_H])
+AH_BOTTOM([#endif /* CONFIG_H */])
 
 AC_ARG_WITH( mp4v2,  [  --with-mp4v2            compile libmp4v2],WITHMP4V2=$withval, WITHMP4V2=yes)
 AC_ARG_ENABLE( drm,  [  --enable-drm            Digital Radio Mondiale support], enable_drm=$enableval, enable_drm=no)
--- a/common/mp4v2/atom_avcC.cpp
+++ b/common/mp4v2/atom_avcC.cpp
@@ -29,7 +29,7 @@
 class SizeTableProperty : public MP4TableProperty 
 {
  public:
-  SizeTableProperty(char *name, MP4IntegerProperty *pCountProperty) :
+  SizeTableProperty(const char *name, MP4IntegerProperty *pCountProperty) :
     MP4TableProperty(name, pCountProperty) {};
  protected:
   void ReadEntry(MP4File *pFile, u_int32_t index) {
--- a/common/mp4v2/atom_ohdr.cpp
+++ b/common/mp4v2/atom_ohdr.cpp
@@ -21,7 +21,7 @@
       \param useCountedFormat    counted format flag.
       \param useUnicode          unicode flag.
   */
-	OhdrMP4StringProperty(char* name, bool useCountedFormat = false,
+	OhdrMP4StringProperty(const char* name, bool useCountedFormat = false,
     bool useUnicode = false): MP4StringProperty(name, useCountedFormat,
     useUnicode) {
   }
--- a/common/mp4v2/atom_stz2.cpp
+++ b/common/mp4v2/atom_stz2.cpp
@@ -30,7 +30,7 @@
 class MP4HalfSizeTableProperty : public MP4TableProperty
 {
 public:
-  MP4HalfSizeTableProperty(char *name, MP4IntegerProperty *pCountProperty) :
+  MP4HalfSizeTableProperty(const char *name, MP4IntegerProperty *pCountProperty) :
     MP4TableProperty(name, pCountProperty) {};
 
   // The count is half the actual size
--- a/common/mp4v2/mp4atom.cpp
+++ b/common/mp4v2/mp4atom.cpp
@@ -806,7 +806,7 @@
 	AddProperty(new MP4Integer24Property("flags"));
 }
 
-void MP4Atom::AddReserved(char* name, u_int32_t size) 
+void MP4Atom::AddReserved(const char* name, u_int32_t size)
 {
 	MP4BytesProperty* pReserved = new MP4BytesProperty(name, size); 
 	pReserved->SetReadOnly();
--- a/common/mp4v2/mp4atom.h
+++ b/common/mp4v2/mp4atom.h
@@ -204,7 +204,7 @@
 
 	void AddVersionAndFlags();
 
-	void AddReserved(char* name, u_int32_t size);
+	void AddReserved(const char* name, u_int32_t size);
 
 	void ExpectChildAtom(const char* name, 
 		bool mandatory, bool onlyOne = true);
--- a/common/mp4v2/mp4file.cpp
+++ b/common/mp4v2/mp4file.cpp
@@ -718,7 +718,7 @@
 	}
 }
 
-void MP4File::ProtectWriteOperation(char* where)
+void MP4File::ProtectWriteOperation(const char* where)
 {
 	if (m_mode == 'r') {
 		throw new MP4Error("operation not permitted in read mode", where);
@@ -1274,7 +1274,7 @@
 }
 
 // NULL terminated list of brands which require the IODS atom
-char *brandsWithIods[] = { "mp42",
+const char *brandsWithIods[] = { "mp42",
                            "isom",
                            NULL};
 
@@ -2211,11 +2211,11 @@
 	for (u_int32_t i = 0; i < m_pTracks.Size(); i++) {
 		if (!strcmp(normType, m_pTracks[i]->GetType())) {
 			if (subType) {
-				if (normType == MP4_AUDIO_TRACK_TYPE) {
+				if (!strcmp(normType,MP4_AUDIO_TRACK_TYPE)) {
 					if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
 						continue;
 					}
-				} else if (normType == MP4_VIDEO_TRACK_TYPE) {
+				} else if (!strcmp(normType,MP4_VIDEO_TRACK_TYPE)) {
 					if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
 						continue;
 					}
@@ -2278,11 +2278,11 @@
   for (u_int32_t i = 0; i < m_pTracks.Size(); i++) {
     if (!strcmp(normType, m_pTracks[i]->GetType())) {
       if (subType) {
-	if (normType == MP4_AUDIO_TRACK_TYPE) {
+	if (!strcmp(normType,MP4_AUDIO_TRACK_TYPE)) {
 	  if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
 	    continue;
 	  }
-	} else if (normType == MP4_VIDEO_TRACK_TYPE) {
+	} else if (!strcmp(normType,MP4_VIDEO_TRACK_TYPE)) {
 	  if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
 	    continue;
 	  }
--- a/common/mp4v2/mp4file.h
+++ b/common/mp4v2/mp4file.h
@@ -700,7 +700,7 @@
 	const char* TempFileName();
 	void Rename(const char* existingFileName, const char* newFileName);
 
-	void ProtectWriteOperation(char* where);
+	void ProtectWriteOperation(const char* where);
 
 	void FindIntegerProperty(const char* name, 
 		MP4Property** ppProperty, u_int32_t* pIndex = NULL);
--- a/common/mp4v2/mp4property.cpp
+++ b/common/mp4v2/mp4property.cpp
@@ -313,7 +313,7 @@
 
 // MP4StringProperty
 
-MP4StringProperty::MP4StringProperty(char* name, 
+MP4StringProperty::MP4StringProperty(const char* name,
 	bool useCountedFormat, bool useUnicode)
 	: MP4Property(name)
 {
@@ -420,7 +420,7 @@
 
 // MP4BytesProperty
 
-MP4BytesProperty::MP4BytesProperty(char* name, u_int32_t valueSize,
+MP4BytesProperty::MP4BytesProperty(const char* name, u_int32_t valueSize,
                                    u_int32_t defaultValueSize)
 	: MP4Property(name)
 {
@@ -549,7 +549,7 @@
 
 // MP4TableProperty
 
-MP4TableProperty::MP4TableProperty(char* name, MP4IntegerProperty* pCountProperty)
+MP4TableProperty::MP4TableProperty(const char* name, MP4IntegerProperty* pCountProperty)
 	: MP4Property(name) 
 {
 	m_pCountProperty = pCountProperty;
@@ -725,7 +725,7 @@
 
 // MP4DescriptorProperty
   
-MP4DescriptorProperty::MP4DescriptorProperty(char* name, 
+MP4DescriptorProperty::MP4DescriptorProperty(const char* name,
 	u_int8_t tagsStart, u_int8_t tagsEnd, bool mandatory, bool onlyOne)
 	: MP4Property(name) 
 { 
--- a/common/mp4v2/mp4property.h
+++ b/common/mp4v2/mp4property.h
@@ -100,7 +100,7 @@
 
 class MP4IntegerProperty : public MP4Property {
 protected:
-	MP4IntegerProperty(char* name)
+	MP4IntegerProperty(const char* name)
 		: MP4Property(name) { };
 
 public:
@@ -118,7 +118,7 @@
 #define MP4INTEGER_PROPERTY_DECL2(isize, xsize) \
 	class MP4Integer##xsize##Property : public MP4IntegerProperty { \
 	public: \
-		MP4Integer##xsize##Property(char* name) \
+		MP4Integer##xsize##Property(const char* name) \
 			: MP4IntegerProperty(name) { \
 			SetCount(1); \
 			m_values[0] = 0; \
@@ -188,7 +188,7 @@
 
 class MP4BitfieldProperty : public MP4Integer64Property {
 public:
-	MP4BitfieldProperty(char* name, u_int8_t numBits)
+	MP4BitfieldProperty(const char* name, u_int8_t numBits)
 		: MP4Integer64Property(name) {
 		ASSERT(numBits != 0);
 		ASSERT(numBits <= 64);
@@ -213,7 +213,7 @@
 
 class MP4Float32Property : public MP4Property {
 public:
-	MP4Float32Property(char* name)
+	MP4Float32Property(const char* name)
 		: MP4Property(name) {
 		m_useFixed16Format = false;
 		m_useFixed32Format = false;
@@ -280,7 +280,7 @@
 
 class MP4StringProperty : public MP4Property {
 public:
-	MP4StringProperty(char* name, 
+	MP4StringProperty(const char* name,
 	  bool useCountedFormat = false, bool useUnicode = false);
 
 	~MP4StringProperty();
@@ -355,7 +355,7 @@
 
 class MP4BytesProperty : public MP4Property {
 public:
-	MP4BytesProperty(char* name, u_int32_t valueSize = 0,
+	MP4BytesProperty(const char* name, u_int32_t valueSize = 0,
                          u_int32_t defaultValueSize = 0);
 
 	~MP4BytesProperty();
@@ -419,7 +419,7 @@
 
 class MP4TableProperty : public MP4Property {
 public:
-	MP4TableProperty(char* name, MP4IntegerProperty* pCountProperty);
+	MP4TableProperty(const char* name, MP4IntegerProperty* pCountProperty);
 
 	~MP4TableProperty();
 
@@ -469,7 +469,7 @@
 
 class MP4DescriptorProperty : public MP4Property {
 public:
-	MP4DescriptorProperty(char* name = NULL, 
+	MP4DescriptorProperty(const char* name = NULL,
 	  u_int8_t tagsStart = 0, u_int8_t tagsEnd = 0,
 	  bool mandatory = false, bool onlyOne = false);
 
@@ -531,7 +531,7 @@
 
 class MP4QosQualifierProperty : public MP4DescriptorProperty {
 public:
-	MP4QosQualifierProperty(char* name = NULL, 
+	MP4QosQualifierProperty(const char* name = NULL,
 	  u_int8_t tagsStart = 0, u_int8_t tagsEnd = 0,
 	  bool mandatory = false, bool onlyOne = false) :
 	MP4DescriptorProperty(name, tagsStart, tagsEnd, mandatory, onlyOne) { }
--- a/common/mp4v2/mp4track.cpp
+++ b/common/mp4v2/mp4track.cpp
@@ -1360,7 +1360,7 @@
   }
 }
 
-MP4Atom* MP4Track::AddAtom(char* parentName, char* childName)
+MP4Atom* MP4Track::AddAtom(const char* parentName, const char* childName)
 {
 	MP4Atom* pChildAtom = MP4Atom::CreateAtom(childName);
 
--- a/common/mp4v2/mp4track.h
+++ b/common/mp4v2/mp4track.h
@@ -168,7 +168,7 @@
 	void UpdateSyncSamples(MP4SampleId sampleId, 
 		bool isSyncSample);
 
-	MP4Atom* AddAtom(char* parentName, char* childName);
+	MP4Atom* AddAtom(const char* parentName, const char* childName);
 
 	void UpdateDurations(MP4Duration duration);
 	MP4Duration ToMovieDuration(MP4Duration trackDuration);
--- a/common/mp4v2/ocidescriptors.cpp
+++ b/common/mp4v2/ocidescriptors.cpp
@@ -171,7 +171,7 @@
 
 class MP4CreatorTableProperty : public MP4TableProperty {
 public:
-	MP4CreatorTableProperty(char* name, MP4Integer8Property* pCountProperty) :
+	MP4CreatorTableProperty(const char* name, MP4Integer8Property* pCountProperty) :
 		MP4TableProperty(name, pCountProperty) {
 	};
 protected:
