[102827] trunk/dports/lang/g95

takeshi at macports.org takeshi at macports.org
Fri Feb 8 22:00:02 PST 2013


Revision: 102827
          https://trac.macports.org/changeset/102827
Author:   takeshi at macports.org
Date:     2013-02-08 22:00:02 -0800 (Fri, 08 Feb 2013)
Log Message:
-----------
g95: added gcc40 variant for Leopard; g95 builds fine against gcc42 on Leopard, but g95 does not work properly

Modified Paths:
--------------
    trunk/dports/lang/g95/Portfile

Added Paths:
-----------
    trunk/dports/lang/g95/files/patch-darwin-fallback.c.diff
    trunk/dports/lang/g95/files/patch-host-darwin.c.diff

Modified: trunk/dports/lang/g95/Portfile
===================================================================
--- trunk/dports/lang/g95/Portfile	2013-02-09 04:32:47 UTC (rev 102826)
+++ trunk/dports/lang/g95/Portfile	2013-02-09 06:00:02 UTC (rev 102827)
@@ -5,7 +5,7 @@
 
 name            g95
 version         0.93
-revision        1
+revision        2
 platforms       darwin
 categories      lang
 license         GPL-2
@@ -17,29 +17,42 @@
                 Innovations and optimizations continue to be worked on. \
                 Parts of the F2003 standard have been implemented in g95.
 homepage        http://g95.org/
-master_sites    ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.2.4/:gcc \
-                http://ftp.g95.org/v${version}/:g95
 dist_subdir     ${name}/${version}
 
+if {${os.major} < 10 || ${build_arch}=="ppc" || ${build_arch}=="i386"} {
+    default_variants +gcc40
+}
+
 set triple ""
-set version_gcc 4.2.4
-array set barch {ppc powerpc ppc64 powerpc64 i386 i386 x86_64 x86_64}
-if {[info exists barch(${build_arch})]} {
-    set triple      $barch(${build_arch})-apple-darwin${os.major}
+if {[variant_isset gcc40]} {
+    set version_gcc 4.0.4
+    set triple  ${os.arch}-apple-darwin${os.major}
+    set dcore   gcc-core-${version_gcc}.tar.bz2
+    checksums   ${dcore} md5    193e0a7a471cca70e374974bc5a60137         \
+                ${dcore} sha1   55c664b33a4dc6b2130c47da28a1d6daab732ce9 \
+                ${dcore} rmd160 af67dc8385942450f6b27ad83a6b9e3d22f779a1
+} else {
+    set version_gcc 4.2.4
+    array set barch {ppc powerpc ppc64 powerpc64 i386 i386 x86_64 x86_64}
+    if {[info exists barch(${build_arch})]} {
+        set triple  $barch(${build_arch})-apple-darwin${os.major}
+    }
+    set dcore   gcc-core-${version_gcc}.tar.bz2
+    checksums   ${dcore} md5     b7a4c167f6a05301591b139b356e36d0 \
+                ${dcore} sha1    540fa6949415ded321a7cbe80bbf8befe85e3566 \
+                ${dcore} rmd160  d54581d0a2ecc22718e6be101c6dc524a4a88463
 }
+master_sites    ftp://gcc.gnu.org/pub/gcc/releases/gcc-${version_gcc}/:gcc \
+                http://ftp.g95.org/v${version}/:g95
 set buildhost   "--build=${triple} --host=${triple}"
 
-set dcore       gcc-core-${version_gcc}.tar.bz2
 set dg95        ${name}_source.tgz
 set gcclib      lib/${name}/${triple}/${version_gcc}
 distfiles       ${dcore}:gcc ${dg95}:g95
 
-checksums       ${dcore} md5     b7a4c167f6a05301591b139b356e36d0 \
-                ${dcore} sha1    540fa6949415ded321a7cbe80bbf8befe85e3566 \
-                ${dcore} rmd160  d54581d0a2ecc22718e6be101c6dc524a4a88463 \
-                ${dg95}  md5     f9552aef0975c1dcf70950b6e6b18ff1 \
-                ${dg95}  sha1    b5e503fd6459b65cbda73190685f9490230d9cff \
-                ${dg95}  rmd160  98d03e9a1835f4b3553a72a798bdf1d90a757176
+checksums-append    ${dg95}  md5     f9552aef0975c1dcf70950b6e6b18ff1 \
+                    ${dg95}  sha1    b5e503fd6459b65cbda73190685f9490230d9cff \
+                    ${dg95}  rmd160  98d03e9a1835f4b3553a72a798bdf1d90a757176
 
 depends_build   port:ld64 port:cctools
 depends_lib     port:libtool port:libiconv
@@ -67,7 +80,9 @@
     reinplace "s|gcc-lib|$name|" ${worksrcpath}/libf95.a-${version}/configure
     reinplace "s|CFLAGS_FOR_TARGET = -O2 \$(CFLAGS)|CFLAGS_FOR_TARGET = ${configure.cflags}|" ${workpath}/gcc-${version_gcc}/Makefile.in
     reinplace "s|^stage1_cflags=\"|stage1_cflags=\"${configure.cflags} ${configure.cc_archflags} |" ${workpath}/gcc-${version_gcc}/configure
-    reinplace "s|named_section|get_named_section|" ${worksrcpath}/trans-decl.c
+    if {![variant_isset gcc40]} {
+        reinplace "s|named_section|get_named_section|" ${worksrcpath}/trans-decl.c
+    }
 }
 
 compiler.blacklist  clang
@@ -98,20 +113,24 @@
                          --with-nm=${prefix}/bin/nm \
                          ${buildhost}; \
             make"
-    system "cd ${workpath}/gcc-${version_gcc}/${name}/gcc; \
-            ar d libbackend.a options.o; \
-            cd ${workpath}/gcc-${version_gcc}/gcc/; \
-            patch -p0 < ${portpath}/files/patch-gcc.c.diff" 
+    if {![variant_isset gcc40]} {
+        system "cd ${workpath}/gcc-${version_gcc}/${name}/gcc; \
+                ar d libbackend.a options.o; \
+                cd ${workpath}/gcc-${version_gcc}/gcc/; \
+                patch -p0 < ${portpath}/files/patch-gcc.c.diff" 
+    }
 }
 
 configure.args  --with-gcc-dir=${workpath}/gcc-${version_gcc} ${buildhost}
 
 post-configure {
-    reinplace "s|\(f951_LDADD\)|(f951_LDADD) ${workpath}/gcc-${version_gcc}/g95/libdecnumber/*.o|" ${worksrcpath}/Makefile
+    if {![variant_isset gcc40]} {
+        reinplace "s|\(f951_LDADD\)|(f951_LDADD) ${workpath}/gcc-${version_gcc}/g95/libdecnumber/*.o|" ${worksrcpath}/Makefile
+    }
 }
 
 pre-build {
-    if {${os.arch}=="i386"} {
+    if {![variant_isset gcc40] && ${os.arch}=="i386"} {
         reinplace "s|\(g95_LDADD\)|(g95_LDADD) ${workpath}/gcc-${version_gcc}/g95/gcc/driver-i386.o|" ${worksrcpath}/Makefile
     }
 }
@@ -135,3 +154,8 @@
     system "ln -sf ${prefix}/${gcclib}/libf95.a ${destroot}${prefix}/lib/libf95.a"
     system -W ${destroot}${prefix} "find . -type f -name '*.dylib' -exec dsymutil {} +"
 }
+
+variant gcc40 description {build against gcc-4.0.x} {
+    patchfiles-delete   patch-lang.opt.diff patch-darwin.h.diff
+    patchfiles-append   patch-host-darwin.c.diff patch-darwin-fallback.c.diff
+}

Added: trunk/dports/lang/g95/files/patch-darwin-fallback.c.diff
===================================================================
--- trunk/dports/lang/g95/files/patch-darwin-fallback.c.diff	                        (rev 0)
+++ trunk/dports/lang/g95/files/patch-darwin-fallback.c.diff	2013-02-09 06:00:02 UTC (rev 102827)
@@ -0,0 +1,82 @@
+--- gcc-4.0.4/gcc/config/rs6000/darwin-fallback.c.orig	2007-11-11 10:46:12.000000000 +0900
++++ gcc-4.0.4/gcc/config/rs6000/darwin-fallback.c	2007-11-11 11:25:18.000000000 +0900
+@@ -261,9 +261,9 @@
+ };
+ 
+ #define UC_FLAVOR_SIZE \
+-  (sizeof (struct mcontext) - sizeof (ppc_vector_state_t))
++  (sizeof (struct __darwin_mcontext) - sizeof (ppc_vector_state_t))
+ 
+-#define UC_FLAVOR_VEC_SIZE (sizeof (struct mcontext))
++#define UC_FLAVOR_VEC_SIZE (sizeof (struct __darwin_mcontext))
+ 
+ #define UC_FLAVOR64_SIZE \
+   (sizeof (struct gcc_mcontext64) - sizeof (ppc_vector_state_t))
+@@ -354,33 +354,33 @@
+     }
+   else
+     {
+-      struct mcontext *m = uctx->uc_mcontext;
++      struct __darwin_mcontext *m = (struct __darwin_mcontext *)uctx->uc_mcontext;
+       int i;
+ 
+-      float_state = &m->fs;
+-      vector_state = &m->vs;
++      float_state = &m->__fs;
++      vector_state = &m->__vs;
+       
+-      new_cfa = m->ss.r1;
++      new_cfa = m->__ss.__r1;
+ 
+-      set_offset (CR2_REGNO, &m->ss.cr);
++      set_offset (CR2_REGNO, &m->__ss.__cr);
+       for (i = 0; i < 32; i++)
+-	set_offset (i, &m->ss.r0 + i);
+-      set_offset (XER_REGNO, &m->ss.xer);
+-      set_offset (LINK_REGISTER_REGNUM, &m->ss.lr);
+-      set_offset (COUNT_REGISTER_REGNUM, &m->ss.ctr);
++	set_offset (i, &m->__ss.__r0 + i);
++      set_offset (XER_REGNO, &m->__ss.__xer);
++      set_offset (LINK_REGISTER_REGNUM, &m->__ss.__lr);
++      set_offset (COUNT_REGISTER_REGNUM, &m->__ss.__ctr);
+ 
+       if (is_vector)
+-	set_offset (VRSAVE_REGNO, &m->ss.vrsave);
++	set_offset (VRSAVE_REGNO, &m->__ss.__vrsave);
+ 
+       /* Sometimes, srr0 points to the instruction that caused the exception,
+ 	 and sometimes to the next instruction to be executed; we want
+ 	 the latter.  */
+-      if (m->es.exception == 3 || m->es.exception == 4
+-	  || m->es.exception == 6
+-	  || (m->es.exception == 7 && !(m->ss.srr1 & 0x10000)))
+-	return_addr = m->ss.srr0 + 4;
++      if (m->__es.__exception == 3 || m->__es.__exception == 4
++	  || m->__es.__exception == 6
++	  || (m->__es.__exception == 7 && !(m->__ss.__srr1 & 0x10000)))
++	return_addr = m->__ss.__srr0 + 4;
+       else
+-	return_addr = m->ss.srr0;
++	return_addr = m->__ss.__srr0;
+     }
+ 
+   fs->cfa_how = CFA_REG_OFFSET;
+@@ -399,14 +399,14 @@
+   set_offset (ARG_POINTER_REGNUM, &return_addr);
+ 
+   for (i = 0; i < 32; i++)
+-    set_offset (32 + i, float_state->fpregs + i);
+-  set_offset (SPEFSCR_REGNO, &float_state->fpscr);
++    set_offset (32 + i, float_state->__fpregs + i);
++  set_offset (SPEFSCR_REGNO, &float_state->__fpscr);
+   
+   if (is_vector)
+     {
+       for (i = 0; i < 32; i++)
+-	set_offset (FIRST_ALTIVEC_REGNO + i, vector_state->save_vr + i);
+-      set_offset (VSCR_REGNO, vector_state->save_vscr);
++	set_offset (FIRST_ALTIVEC_REGNO + i, vector_state->__save_vr + i);
++      set_offset (VSCR_REGNO, vector_state->__save_vscr);
+     }
+ 
+   return true;

Added: trunk/dports/lang/g95/files/patch-host-darwin.c.diff
===================================================================
--- trunk/dports/lang/g95/files/patch-host-darwin.c.diff	                        (rev 0)
+++ trunk/dports/lang/g95/files/patch-host-darwin.c.diff	2013-02-09 06:00:02 UTC (rev 102827)
@@ -0,0 +1,31 @@
+--- gcc-4.0.4/gcc/config/rs6000/host-darwin.c.orig	2007-11-10 13:24:23.000000000 +0900
++++ gcc-4.0.4/gcc/config/rs6000/host-darwin.c	2007-11-10 13:19:23.000000000 +0900
+@@ -33,10 +33,6 @@
+ static void segv_handler (int, siginfo_t *, void *);
+ static void darwin_rs6000_extra_signals (void);
+ 
+-/* This doesn't have a prototype in signal.h in 10.2.x and earlier,
+-   fixed in later releases.  */
+-extern int sigaltstack(const struct sigaltstack *, struct sigaltstack *);
+-
+ #undef HOST_HOOKS_EXTRA_SIGNALS
+ #define HOST_HOOKS_EXTRA_SIGNALS darwin_rs6000_extra_signals
+
+@@ -60,7 +60,7 @@
+      which case the next line will segfault _again_.  Handle this case.  */
+   signal (SIGSEGV, segv_crash_handler);
+ 
+-  faulting_insn = *(unsigned *)uc->uc_mcontext->ss.srr0;
++  faulting_insn = *(unsigned *)uc->uc_mcontext->__ss.__srr0;
+ 
+   /* Note that this only has to work for GCC, so we don't have to deal
+      with all the possible cases (GCC has no AltiVec code, for
+@@ -109,7 +109,7 @@
+     }
+ 
+   fprintf (stderr, "[address=%08lx pc=%08x]\n", 
+-	   uc->uc_mcontext->es.dar, uc->uc_mcontext->ss.srr0);
++	   uc->uc_mcontext->__es.__dar, uc->uc_mcontext->__ss.__srr0);
+   internal_error ("Segmentation Fault");
+   exit (FATAL_EXIT_CODE);
+ }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20130208/dc91ef3d/attachment-0001.html>


More information about the macports-changes mailing list