Subject: pkg/25716: pkgsrc/misc/kdeutils3
To: None <gnats-bugs@gnats.NetBSD.org>
From: None <john@johnrshannon.com>
List: pkgsrc-bugs
Date: 05/26/2004 06:50:09
>Number:         25716
>Category:       pkg
>Synopsis:       Package does not compile with gcc 3.4.0
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed May 26 12:51:00 UTC 2004
>Closed-Date:
>Last-Modified:
>Originator:     John R. Shannon
>Release:        NetBSD 2.0_BETA
>Organization:
	johnrshannon.com
>Environment:
System: NetBSD colleen.internal.johnrshannon.com 2.0_BETA NetBSD 2.0_BETA (KERNEL) #0: Mon May 24 05:31:10 MDT 2004 root@colleen.internal.johnrshannon.com:/usr/obj/usr/src/sys/arch/i386/compile/KERNEL i386
Architecture: i386
Machine: i386
>Description:
	Package does not compile with gcc 3.4.0. Most of the problems come from
	NetBSD not implementing all the required math function for type long 
	double (supported in 3.4.0 but not NetBSD's system compiler). Other
	problems come from more thorough semantic checking in 3.4.0. The
	missing long double function problem can be rectified by using the
	functions in libstdc++v3 (if available); this is the approach taken in
	my supplied pathes.
>How-To-Repeat:
	Build with wip/gcc-3.4
>Fix:
	Apply the followwing patches:

$NetBSD$

--- ./kcalc/kcalc_core.cpp.orig	2004-05-24 14:35:40.000000000 -0600
+++ ./kcalc/kcalc_core.cpp
@@ -858,7 +858,7 @@ void CalcEngine::StatSumSquares(CALCAMNT
 
 void CalcEngine::Tangens(CALCAMNT input)
 {
-	CALCAMNT tmp = input;
+	CALCAMNT aux, tmp = input;
 
 	switch (_angle_mode)
 	{
@@ -873,9 +873,20 @@ void CalcEngine::Tangens(CALCAMNT input)
 		break;
 	}
 
-	_last_result = TAN(tmp);
+	aux = tmp;
+        // make aux positive
+	if (aux < 0) aux = -aux;
+	// put aux between 0 and pi
+	while (aux > pi) aux -= pi;
+	// if were are really close to pi/2 throw an error
+	// tan(pi/2) => inf
+	// using the 10 factor because without it 270º tan still gave a result
+	if ( (aux - pi/2 < POS_ZERO * 10) && (aux - pi/2 > NEG_ZERO * 10) )
+		_error = true;
+	else
+		_last_result = TAN(tmp);
 
-	// Now a cheat to help the weird case of COS 90 degrees not being 0!!!
+	// Now a cheat to help the weird case of TAN 0 degrees not being 0!!!
 	if (_last_result < POS_ZERO && _last_result > NEG_ZERO)
 		_last_result = 0.0;
 


$NetBSD$

--- ./kcalc/kcalcdisplay.cpp.orig	2004-04-04 03:16:17.000000000 -0600
+++ ./kcalc/kcalcdisplay.cpp
@@ -38,7 +38,8 @@ static CALCAMNT toDouble(const QString &
 {
 	char *ptr = 0;
 	errno = 0;
-	CALCAMNT result = (CALCAMNT) STRTOD(s.latin1(),&ptr);
+	CALCAMNT result = 0;
+	sscanf(s.latin1(), "%Lf", &result);
 
 	// find first non-space character for check below
 	while (ptr != 0 && *ptr != '\0' && isspace(*ptr)) {



$NetBSD$

--- kcalc/kcalcdisplay.h.orig	2004-02-28 02:55:17.000000000 -0700
+++ kcalc/kcalcdisplay.h
@@ -26,10 +26,9 @@
 #ifndef _D_KCALCDISPLAY_H_
 #define _D_KCALCDISPLAY_H_
 
-#include <stdlib.h>
+#include "kcalctype.h"
 #include <qlabel.h>
 #include <qtimer.h>
-#include "kcalctype.h"
 
 
 #ifdef HAVE_LONG_DOUBLE


$NetBSD$

--- kcalc/kcalctype.h.orig	2004-04-04 03:16:17.000000000 -0600
+++ kcalc/kcalctype.h
@@ -30,6 +30,55 @@
 #ifndef KCALC_TYPE_H
 #define KCALC_TYPE_H
 
+// NetBSD lacks all the required math functions for long double. If
+// we're using gcc > 3, they're available in libstdc++-v3:
+#if __GNUC__ > 3
+#include <climits>
+#include <cmath>
+#include <cstdlib>  // For strof, strtold
+
+using namespace std;
+
+#ifdef HAVE_LONG_DOUBLE
+/* should be detected by autoconf and defined in config.h
+   Be carefull when modifying these lines. HAVE_LONG_DOUBLE
+   is used all over kcalc's sources to determine whether 
+   long double of double is the fundamental data type for kcalc*/
+
+
+
+	typedef long double CALCAMNT;
+	#define STRTOD(X,Y)	strtold(X,Y)
+#else
+	typedef double CALCAMNT;
+	#define STRTOD(X,Y)	strtod(X,Y)
+#endif
+
+#define FABS(X)	fabs(X)
+#define MODF(X,Y)	modf((double)X,(double*)Y)
+#define FMOD(X,Y)	fmod((double)X,(double)Y)
+#define SIN(X)		sin(X)
+#define ASIN(X)	asin((double)X)
+#define SINH(X)	sinh(X)
+#define ASINH(X)	asinh(X)
+#define COS(X)		cos(X)
+#define COSH(X)	cosh(X)
+#define ACOS(X)	acos((double)X)
+#define ACOSH(X)	acosh(X)
+#define TAN(X)		tan(X)
+#define TANH(X)	tanh(X)
+#define ATAN(X)	atan((double)X)
+#define ATANH(X)	atanh(X)
+#define EXP(X)		exp(X)
+#define POW(X,Y)	pow(X,Y)
+#define LN(X)		log(X)
+#define LOG_TEN(X)	log10(X)
+#define SQRT(X)	sqrt(X)
+#define ISINF(X)	isinf(X)
+
+#else
+// Use pre-patch code with HAVE_LONG_DOUBLE undef'd
+
 #include <limits.h>
 #include <math.h>
 
@@ -38,10 +87,9 @@
 
 // Undefine HAVE_LONG_DOUBLE for Beta 4 since RedHat 5.0 comes with a borken
 // glibc
-
-//#ifdef HAVE_LONG_DOUBLE
-//#undef HAVE_LONG_DOUBLE
-//#endif
+#ifdef HAVE_LONG_DOUBLE
+#undef HAVE_LONG_DOUBLE
+#endif
 
 #ifdef HAVE_LONG_DOUBLE
 /* should be detected by autoconf and defined in config.h
@@ -107,6 +155,9 @@
 #endif
 
 #undef HAVE_LONG_LONG
+
+#endif
+
 #if defined(LLONG_MAX) && defined(HAVE_LONG_DOUBLE)
 #define KCALC_LONG_MIN	LLONG_MIN
 #define KCALC_LONG_MAX	LLONG_MAX


$NetBSD$

--- ./ksim/ksimview.cpp.orig	2004-05-25 08:03:51.000000000 -0600
+++ ./ksim/ksimview.cpp
@@ -272,12 +272,14 @@ void KSim::MainView::reparseConfig(bool 
   for (it = list.begin(); it != list.end(); ++it) {
     if ((*it).isDifferent()) {
       if ((*it).isEnabled()) { // Go through the added/removed plugins and load/unload them
-        addPlugin(KDesktopFile((*it).filename()));
+        const KDesktopFile kdf((*it).filename());
+        addPlugin(kdf);
         m_prefDialog->createPage((*it).libName());
       }
       else {
         m_prefDialog->removePage((*it).libName());
-        removePlugin(KDesktopFile((*it).filename()));
+        const KDesktopFile kdf((*it).filename());
+        removePlugin(kdf);
       }
     }
   }
@@ -304,7 +306,10 @@ void KSim::MainView::addPlugins()
   QStringList locatedFiles = KGlobal::dirs()->findAllResources("data", "ksim/monitors/*.desktop");
   QStringList::ConstIterator it;
   for (it = locatedFiles.begin(); it != locatedFiles.end(); ++it)
-    addPlugin(KDesktopFile(*it, true));
+  {
+    const KDesktopFile kdf(*it, true);
+    addPlugin(kdf);
+  }
 }
 
 void KSim::MainView::addPlugin(const KDesktopFile &file, bool force)


$NetBSD$

--- ksim/library/themeloader.h.orig	2004-05-25 08:15:13.000000000 -0600
+++ ksim/library/themeloader.h
@@ -45,6 +45,7 @@ namespace KSim
   class Theme
   {
     friend class ThemeLoader;
+    friend class ThemePrefs;
     public:
       enum PixmapType { KrellPanel = 0, KrellMeter, KrellSlider };
       ~Theme();
>Release-Note:
>Audit-Trail:
>Unformatted: