File: 321-support-gfortran.dpatch

package info (click to toggle)
cernlib 20061220%2Bdfsg3-4.4
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 7,872 kB
  • sloc: sh: 9,517; makefile: 187
file content (192 lines) | stat: -rwxr-xr-x 7,569 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#! /bin/sh /usr/share/dpatch/dpatch-run
## 321-support-gfortran.dpatch by  <kmccarty@debian.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Support compilation with gfortran.  Patch thanks to Harald Vogt, plus:
## DP: - Extra hack to IOSTAT EOF return value to support gfortran-4.3.
## DP: - Fix to patchy.car to change default fortran compiler in nyshell
## DP:   in gfortran case.

@DPATCH@
diff -urNad cernlib-2006.dfsg.2~/src/mathlib/gen/c/rteq464.F cernlib-2006.dfsg.2/src/mathlib/gen/c/rteq464.F
--- cernlib-2006.dfsg.2~/src/mathlib/gen/c/rteq464.F	1996-04-01 07:01:53.000000000 -0800
+++ cernlib-2006.dfsg.2/src/mathlib/gen/c/rteq464.F	2008-03-13 09:40:04.000000000 -0700
@@ -45,7 +45,16 @@
          MT=3
          Z(1)=SQRT(SQRT(-D))
          Z(2)=-Z(1)
+#if !defined(CERNLIB_GFORTRAN)
          Z(3)=SQRT(-Z(1)**2)
+#else
+*        Using gfortran the following sqrt yields an inconsistent result
+*        if the imaginary part is a "negative zero"
+*        gfortran is conform with the Fortran ISO 2003 standard (1.6.1)
+*        Therefore if the imaginary part is a "negative zero" 
+*        it must be replaced by a "positive zero" to be consistent
+         if (imag(-z(1)**2) .eq. 0) z(3)=SQRT(real(-z(1)**2)+i*0)
+#endif
          Z(4)=-Z(3)
         ENDIF
         DC=(-R12*D)**3
@@ -94,9 +103,21 @@
        W1=SQRT(U(K1)+I*0)
        W2=SQRT(U(K2)+I*0)
       ELSE
+#if !defined(CERNLIB_GFORTRAN)
        MT=3
        W1=SQRT(U(2)+I*U(3))
        W2=SQRT(U(2)-I*U(3))
+#else
+*      For gfortran see above
+       MT=3
+       IF (U(3) .NE. 0.)  THEN
+         W1=SQRT(U(2)+I*U(3))
+         W2=SQRT(U(2)-I*U(3))
+       ELSE
+         W1=SQRT(U(2)+I*0)
+         W2=W1
+       ENDIF
+#endif
       ENDIF
       W3=0
       IF(W1*W2 .NE. 0) W3=-Q/(8*W1*W2)
diff -urNad cernlib-2006.dfsg.2~/src/mathlib/gen/v/nranf.F cernlib-2006.dfsg.2/src/mathlib/gen/v/nranf.F
--- cernlib-2006.dfsg.2~/src/mathlib/gen/v/nranf.F	1996-04-01 07:02:54.000000000 -0800
+++ cernlib-2006.dfsg.2/src/mathlib/gen/v/nranf.F	2008-03-13 09:40:04.000000000 -0700
@@ -14,10 +14,12 @@
       VECTOR(I) = RNDM(I)
   100 CONTINUE
       RETURN
-      ENTRY NRANIN (V)
+      END
+      SUBROUTINE NRANIN (V)
       CALL RDMIN(V)
       RETURN
-      ENTRY NRANUT (V)
+      END
+      SUBROUTINE NRANUT (V)
       CALL RDMOUT(V)
       RETURN
       END
diff -urNad cernlib-2006.dfsg.2~/src/packlib/hbook/chbook/Imakefile cernlib-2006.dfsg.2/src/packlib/hbook/chbook/Imakefile
--- cernlib-2006.dfsg.2~/src/packlib/hbook/chbook/Imakefile	1999-11-15 05:25:58.000000000 -0800
+++ cernlib-2006.dfsg.2/src/packlib/hbook/chbook/Imakefile	2008-03-13 09:40:04.000000000 -0700
@@ -13,7 +13,19 @@
 #endif
 
 #if defined(CERNLIB_LINUX)
+EXTRA_DEFINES := $(EXTRA_DEFINES) -D_SVID_SOURCE
+#endif
+
+#if defined(CERNLIB_LINUX) && !defined(CERNLIB_QMLXIA64)
+EXTRA_DEFINES := $(EXTRA_DEFINES) -Df2cFortran
+#endif
+
+#if defined(CERNLIB_QMLXIA64) 
+#if defined(CERNLIB_GFORTRAN)
+EXTRA_DEFINES := $(EXTRA_DEFINES) -DgFortran
+#else
 EXTRA_DEFINES := $(EXTRA_DEFINES) -Df2cFortran
 #endif
+#endif
 
 SubdirLibraryTarget(NullParameter,NullParameter)
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/unix/gfortgs/Imakefile cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/unix/gfortgs/Imakefile
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/unix/gfortgs/Imakefile	2006-09-04 05:32:59.000000000 -0700
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/unix/gfortgs/Imakefile	2008-03-13 09:40:04.000000000 -0700
@@ -1,6 +1,6 @@
 
-SRCS_F= irndm.F qnext.F rdmin.F
+SRCS_F= irndm.F qnext.F rdmin.F kernlibgetarg.F
 
-SRCS_C= lshift.c ishftr.c getarg.c
+SRCS_C= lshift.c ishftr.c /* getarg.c */
 
 SubdirLibraryTarget(NullParameter,NullParameter)
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/unix/gfortgs/kernlibgetarg.F cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/unix/gfortgs/kernlibgetarg.F
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/unix/gfortgs/kernlibgetarg.F	1969-12-31 16:00:00.000000000 -0800
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/unix/gfortgs/kernlibgetarg.F	2008-03-13 09:40:04.000000000 -0700
@@ -0,0 +1,19 @@
+*     Wrapper GETARG routine for gfortran,
+*     originally written by Harald Vogt <hvogt@ifh.de>
+*
+*     SUBROUTINE GETARG (JARG, CHARG)
+*     The following stuff is required to use gfortrans inline routine GETARG
+*     It is required to avoid the calling GETARG here which conflicts
+*     to the Fortran rules
+*     CHARACTER    CHARG*(*)
+*     CALL MYGETARG (JARG, CHARG)
+*     END
+
+      SUBROUTINE KERNLIBGETARG (JARG, CHARG)
+      CHARACTER    CHARG*(*)
+*     gfortran translates the following line to a call
+*     to its library routine _gfortran_getarg_i4
+*     therefore it will not clash in the linking step
+      CALL GETARG (JARG, CHARG)
+      END
+ 
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kuip/kuip/kfor.h cernlib-2006.dfsg.2/src/packlib/kuip/kuip/kfor.h
--- cernlib-2006.dfsg.2~/src/packlib/kuip/kuip/kfor.h	2006-09-15 02:35:30.000000000 -0700
+++ cernlib-2006.dfsg.2/src/packlib/kuip/kuip/kfor.h	2008-03-13 09:40:05.000000000 -0700
@@ -1031,7 +1031,7 @@
 #if !defined(CERNLIB_GFORTRAN)
 #define  Getarg           F77_NAME(getarg,GETARG)
 #else
-#define  Getarg           _gfortran_getarg_i4
+#define  Getarg           F77_NAME(kernlibgetarg,KERNLIBGETARG)
 #endif
                  extern SUBROUTINE Getarg;
 #define  Goparm           F77_NAME(goparm,GOPARM)
diff -urNad cernlib-2006.dfsg.2~/src/packlib/zebra/fq/fzdaeof.inc cernlib-2006.dfsg.2/src/packlib/zebra/fq/fzdaeof.inc
--- cernlib-2006.dfsg.2~/src/packlib/zebra/fq/fzdaeof.inc	2006-09-15 02:35:31.000000000 -0700
+++ cernlib-2006.dfsg.2/src/packlib/zebra/fq/fzdaeof.inc	2008-03-13 09:40:05.000000000 -0700
@@ -46,8 +46,12 @@
 #elif defined(CERNLIB_WINDOWS)
 *    only valid for dec fortran (e.g. not f2c + microsoft c)
       PARAMETER    (IOSEOF = 36)
-#elif defined(CERNLIB_GFORTRAN)
+#elif defined(CERNLIB_GFORTRAN) && defined(__GNUC__) && defined(__GNUC_MINOR__)
+# if (__GNUC__ > 4 || __GNUC_MINOR__ >= 3)
+      PARAMETER    (IOSEOF = 5002)
+# else
       PARAMETER    (IOSEOF = 3)
+# endif
 #elif 1
       PARAMETER    (IOSEOF = -1)
 #endif
diff -urNad cernlib-2006.dfsg.2~/src/patchy/fcasplit.F cernlib-2006.dfsg.2/src/patchy/fcasplit.F
--- cernlib-2006.dfsg.2~/src/patchy/fcasplit.F	2008-03-13 09:39:39.000000000 -0700
+++ cernlib-2006.dfsg.2/src/patchy/fcasplit.F	2008-03-13 09:40:05.000000000 -0700
@@ -352,7 +352,11 @@
       PARAMETER   (CHEXAS  = '.s')
       PARAMETER   (CHEXOBJ = '.o')
 
+#if defined(CERNLIB_GFORTRAN)
+      PARAMETER   (CHWHF = 'gfortran  ')
+#else
       PARAMETER   (CHWHF = 'g77  ')
+#endif
       PARAMETER   (CHWHC = 'gcc  ')
       PARAMETER   (CHWHA = 'as  ')
 #endif
diff -urNad cernlib-2006.dfsg.2~/src/patchy/patchy.car cernlib-2006.dfsg.2/src/patchy/patchy.car
--- cernlib-2006.dfsg.2~/src/patchy/patchy.car	2006-09-04 05:33:00.000000000 -0700
+++ cernlib-2006.dfsg.2/src/patchy/patchy.car	2008-03-13 09:41:01.000000000 -0700
@@ -25968,10 +25968,14 @@
 +SELF, IF=QMLNX.
       CALL SMCIL (-1, 'fo:1'  , '-O2')
       CALL SMCIL (-1, 'fo:2'  , '-O0')
-      CALL SMCIL (-1, 'fopt'  , '-c -Nx800 -Nc200')
+      CALL SMCIL (-1, 'fopt'  , '-c -g')
       CALL SMCIL (-1, 'co:1'  , '-O2')
       CALL SMCIL (-1, 'co:2'  , '-O0')
-      CALL SMCIL (-1, 'copt'  , '-c -posix')
+      CALL SMCIL (-1, 'copt'  , '-c -g')
+
++SELF, IF=GFORTRAN.
+      CALL SMCIL (-1, 'fc'    , 'gfortran')
+
 +SELF, IF=QMNXT.
 +SELF, IF=QMSGI.
 +SELF, IF=QMSUN.