| 11 | | description FSF Binutils for i386-elf cross development |
| 12 | | long_description Free Software Foundation development toolchain ("binutils") for \ |
| 13 | | i386-elf cross development. |
| 14 | | platforms darwin |
| 15 | | categories cross devel |
| 16 | | license GPL-3+ |
| 17 | | maintainers gmail.com:jinksys |
| 18 | | homepage http://www.gnu.org/software/binutils/binutils.html |
| 19 | | master_sites ftp://ftp.kernel.org/pub/linux/devel/binutils/ \ |
| 20 | | http://ftp.kernel.org/pub/linux/devel/binutils/ |
| 21 | | distname binutils-${version} |
| 22 | | use_bzip2 yes |
| 23 | | checksums md5 ee2d3e996e9a2d669808713360fa96f8 \ |
| 24 | | sha1 747e7b4d94bce46587236dc5f428e5b412a590dc \ |
| 25 | | rmd160 284074e2453e517d036ffce2c0f3d56439e2e5c0 |
| 26 | | |
| 27 | | depends_lib port:gettext |
| 28 | | |
| 29 | | # All cross ports violate the mtree layout. |
| 30 | | destroot.violate_mtree yes |
| 31 | | |
| 32 | | # Download everything to binutils/ |
| 33 | | dist_subdir binutils |
| 34 | | |
| 35 | | if {${os.platform} == "darwin" && ${os.major} >= 10} { |
| 36 | | patchfiles-append patch-binutils__strings.c |
| 37 | | } |
| 38 | | # i386-dis.c:6670:21: fatal error: parser recursion limit reached, program too complex |
| 39 | | if {${configure.compiler} == "clang"} { |
| 40 | | configure.compiler llvm-gcc-4.2 |
| 41 | | } |
| 42 | | |
| 43 | | # Build in a different directory, as advised in the README file. |
| 44 | | pre-configure { system "cd ${workpath} && mkdir -p build"} |
| 45 | | configure.dir ${workpath}/build |
| 46 | | configure.cmd ${worksrcpath}/configure |
| 47 | | configure.args --infodir='${prefix}/share/info' --target=${crossgcc-target} \ |
| 48 | | --program-prefix=${crossgcc-target}- --mandir='${prefix}/share/man' \ |
| 49 | | --disable-werror |
| 50 | | if {${os.platform} == "darwin" && ($build_arch == "x86_64" || $build_arch == "ppc64")} { |
| 51 | | configure.args-append --build=${build_arch}-apple-${os.platform}${os.version} |
| 52 | | } |
| 53 | | build.dir ${workpath}/build |
| 54 | | |
| 55 | | # We don't want the etc module. |
| 56 | | post-extract { |
| 57 | | system "rm -rf ${worksrcpath}/etc" |
| 58 | | } |
| 59 | | |
| 60 | | post-patch { |
| 61 | | namespace eval crossgcc {} |
| 62 | | |
| 63 | | # Fix the info pages and related stuff. |
| 64 | | # |
| 65 | | # path: path to the doc directory (e.g. gas/doc/) |
| 66 | | # makefile: path to Makefile.in (e.g. gas/doc/Makefile.in) |
| 67 | | # name: name of the info page (e.g. as) |
| 68 | | # suffix: suffix of the souce page (texinfo or texi) |
| 69 | | proc crossgcc::fixinfo { path makefile name suffix } { |
| 70 | | global crossgcc-target worksrcpath |
| 71 | | |
| 72 | | # Fix the source |
| 73 | | reinplace "s|setfilename ${name}.info|setfilename ${crossgcc-target}-${name}.info|g" \ |
| 74 | | ${worksrcpath}/${path}/${name}.${suffix} |
| 75 | | reinplace "s|(${name})|(${crossgcc-target}-${name})|g" \ |
| 76 | | ${worksrcpath}/${path}/${name}.${suffix} |
| 77 | | reinplace "s|@file{${name}}|@file{${crossgcc-target}-${name}}|g" \ |
| 78 | | ${worksrcpath}/${path}/${name}.${suffix} |
| 79 | | |
| 80 | | # Fix the Makefile |
| 81 | | reinplace "s|${name}.info|${crossgcc-target}-${name}.info|g" \ |
| 82 | | ${worksrcpath}/${makefile} |
| 83 | | reinplace "s|${name}.${suffix}|${crossgcc-target}-${name}.${suffix}|g" \ |
| 84 | | ${worksrcpath}/${makefile} |
| 85 | | |
| 86 | | # Rename the source |
| 87 | | file rename ${worksrcpath}/${path}/${name}.${suffix} \ |
| 88 | | ${worksrcpath}/${path}/${crossgcc-target}-${name}.${suffix} |
| 89 | | |
| 90 | | # Fix install-info's dir. |
| 91 | | # (note: this may be effectless if there was no info dir to be fixed) |
| 92 | | reinplace "s|--info-dir=\$(DESTDIR)\$(infodir)|--dir-file=\$(DESTDIR)\$(infodir)/${crossgcc-target}-dir|g" \ |
| 93 | | "${worksrcpath}/${makefile}" |
| 94 | | } |
| 95 | | |
| 96 | | # Fix the gettext files and related stuff. |
| 97 | | # |
| 98 | | # module: name of the module (e.g. gas) |
| 99 | | proc crossgcc::fixgettext { module } { |
| 100 | | global crossgcc-target worksrcpath |
| 101 | | |
| 102 | | if { [ file exists "${worksrcpath}/${module}/Makefile.in" ] } { |
| 103 | | reinplace "s|@PACKAGE@|${crossgcc-target}-@PACKAGE@|g" \ |
| 104 | | "${worksrcpath}/${module}/Makefile.in" |
| 105 | | } |
| 106 | | if { [ file exists "${worksrcpath}/${module}/doc/Makefile.in" ] } { |
| 107 | | reinplace "s|@PACKAGE@|${crossgcc-target}-@PACKAGE@|g" \ |
| 108 | | "${worksrcpath}/${module}/doc/Makefile.in" |
| 109 | | } |
| 110 | | if { [ file exists "${worksrcpath}/${module}/po/Make-in" ] } { |
| 111 | | reinplace "s|@PACKAGE@|${crossgcc-target}-@PACKAGE@|g" \ |
| 112 | | "${worksrcpath}/${module}/po/Make-in" |
| 113 | | } |
| 114 | | } |
| 115 | | |
| 116 | | # gas/doc/as.texinfo |
| 117 | | crossgcc::fixinfo gas/doc/ gas/doc/Makefile.in as texinfo |
| 118 | | |
| 119 | | # bfd/doc/bfd.texinfo |
| 120 | | crossgcc::fixinfo bfd/doc/ bfd/doc/Makefile.in bfd texinfo |
| 121 | | |
| 122 | | # binutils/doc/binutils.texi |
| 123 | | crossgcc::fixinfo binutils/doc/ binutils/doc/Makefile.in binutils texi |
| 124 | | |
| 125 | | # gprof/gprof.texi |
| 126 | | crossgcc::fixinfo gprof/ gprof/Makefile.in gprof texi |
| 127 | | |
| 128 | | # ld/ld.texinfo |
| 129 | | crossgcc::fixinfo ld/ ld/Makefile.in ld texinfo |
| 130 | | |
| 131 | | # gettext stuff. |
| 132 | | crossgcc::fixgettext bfd |
| 133 | | crossgcc::fixgettext binutils |
| 134 | | crossgcc::fixgettext gas |
| 135 | | crossgcc::fixgettext gprof |
| 136 | | crossgcc::fixgettext ld |
| 137 | | crossgcc::fixgettext opcodes |
| 138 | | } |
| 139 | | |
| 140 | | post-destroot { |
| 141 | | # Installing (host) libiberty was a mistake. |
| 142 | | foreach f [glob -directory "${destroot}${prefix}/lib" libiberty.a */libiberty.a] { |
| 143 | | file delete $f |
| 144 | | } |
| 145 | | } |
| 146 | | |
| 147 | | livecheck.type freecode |
| 148 | | livecheck.name binutils |
| | 13 | configure.args-append --disable-werror |