source: trunk/dports/devel/openssl/Portfile @ 48332

Last change on this file since 48332 was 48332, checked in by jmr@…, 10 years ago

openssl: handle arbitrary universal_archs (#18596)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 5.6 KB
Line 
1# $Id: Portfile 48332 2009-03-19 15:39:02Z jmr@macports.org $
2
3PortSystem 1.0
4
5name                    openssl
6version                 0.9.8j
7platforms               darwin freebsd
8categories              devel security
9maintainers             mww
10homepage                http://www.openssl.org/
11description             OpenSSL SSL/TLS cryptography library
12
13long_description \
14        The OpenSSL Project is a collaborative effort to develop a robust, \
15        commercial-grade, full-featured, and Open Source toolkit implementing \
16        the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security \
17        (TLS v1) protocols as well as a full-strength general purpose \
18        cryptography library.
19
20master_sites    http://www.openssl.org/source/
21checksums               md5     a5cb5f6c3d11affb387ecf7a997cac0c \
22                                sha1    f70f7127a26e951e8a0d854c0c9e6b4c24df78e4 \
23                                rmd160  d60417e0fd943fbffc6dae8391a21dcf5d97e967
24
25depends_lib             port:zlib
26
27platform darwin {
28        patchfiles      patch-Makefile.org.diff patch-crypto-Makefile.diff
29}
30
31configure.cmd   ./config
32configure.args  -L${prefix}/lib --openssldir=${prefix}/etc/openssl zlib no-asm no-krb5 shared
33
34platform darwin 6 {
35        depends_lib-append      port:dlcompat
36}
37
38variant rfc3779 description {enable RFC 3779: X.509 Extensions for IP Addresses and AS Identifiers} {
39        configure.args-append   enable-rfc3779
40}
41
42use_parallel_build      no
43
44destroot.destdir        INSTALL_PREFIX=${destroot}
45destroot.args           MANDIR=${prefix}/share/man
46
47test.run                yes
48
49livecheck.check regex
50livecheck.url   ${master_sites}
51livecheck.regex ${name}-(0.9.8\[a-z\])
52
53if { ![info exists universal_archs] } {
54        set universal_archs {i386 ppc}
55        #set universal_archs {i386 x86_64 ppc ppc64}
56}
57set first_arch [lindex ${universal_archs} 0]
58
59variant universal {
60    patchfiles-append patch-Configure-sysroot.diff
61        post-patch {
62            reinplace "s|__UNIVERSAL_SYSROOT__|${universal_sysroot}|" ${worksrcpath}/Configure
63                foreach arch ${universal_archs} {
64                        if {[string equal ${arch} ${first_arch}]} {
65                                move ${worksrcpath} ${workpath}/${first_arch}
66                        } else {
67                                copy ${workpath}/${first_arch} ${workpath}/${arch}
68                        }
69                }
70        }
71
72        configure {
73                foreach arch ${universal_archs} {
74                        if { [string first 64 $arch] == -1 } {
75                                set my_cc "darwin-${arch}-cc"
76                        } else {
77                                if {[string first ppc $arch] != -1} {
78                                        set my_cc "darwin64-ppc-cc"
79                                } else {
80                                        set my_cc "darwin64-${arch}-cc"
81                                }
82                        }
83                        system "cd ${workpath}/${arch} && ./Configure ${my_cc} ${configure.pre_args} ${configure.args}"
84                }
85        }
86
87        build {
88                foreach arch ${universal_archs} {
89                        system "cd ${workpath}/${arch} && make all"
90                }
91        }
92
93        destroot {
94# in port 1.7, just call:
95#               merge "${workpath}/pre-dest"
96# till then, do this:
97                foreach arch ${universal_archs} {
98                        xinstall -d ${workpath}/pre-dest/${arch}
99                        system "cd ${workpath}/${arch} && make install INSTALL_PREFIX=${workpath}/pre-dest/${arch} MANDIR=${prefix}/share/man"
100                       
101                        # opensslconf.h will differ between 32- and 64-bit, so patch it so it doesn't
102                        if { [string first 64 $arch] != -1 } {
103                                if { [string first ppc $arch] != -1 } {
104                                        set configpatch ${filespath}/patch-opensslconf.h-ppc64.diff
105                                } else {
106                                        set configpatch ${filespath}/patch-opensslconf.h-x86_64.diff
107                                }
108                        } else {
109                                set configpatch ${filespath}/patch-opensslconf.h-32.diff
110                        }
111                        system "cd ${workpath}/pre-dest/${arch}${prefix} && patch --no-backup-if-mismatch -p0 < ${configpatch}"
112                }
113
114                set basepath "${workpath}/pre-dest/${first_arch}"
115                fs-traverse file "${basepath}" {
116                        set fpath [string range "${file}" [string length "${basepath}"] [string length "${file}"]]
117                        if {${fpath} != ""} {
118                                ui_debug ":: ${fpath}"
119
120                                switch -exact [file type "${basepath}${fpath}"] {
121                                        directory {
122                                                # just create directories
123                                                ui_debug "-- dir:: ${fpath}"
124                                                file mkdir "${destroot}${fpath}"
125                                        }
126                                        link {
127                                                # copy symlinks (TODO: check if target matches)
128                                                ui_debug "-- lnk:: ${fpath}"
129                                                file copy "${basepath}${fpath}" "${destroot}${fpath}"
130                                        }
131                                        file {
132                                                # treat files depending on their filetype
133                                                ui_debug "-- file:: ${fpath}"
134                                                set filetype [exec "/usr/bin/file" "-b" "${basepath}${fpath}"]
135                                                switch -regexp ${filetype} {
136                                                        Mach-O.* {
137                                                                # Mach-O binaries get lipo-ed
138                                                                ui_debug "Mach-O file -- lipo-ing"
139                                                                set machocmd "lipo"
140                                                                foreach arch ${universal_archs} {
141                                                                        set machocmd "${machocmd} -arch $arch ${workpath}/pre-dest/${arch}/${fpath}"
142                                                                }
143                                                                set machocmd "${machocmd} -create -output ${destroot}${fpath}"
144                                                                system ${machocmd}
145                                                        }
146                                                        current\ ar\ archive {
147                                                                # ar archives get lipo-ed
148                                                                ui_debug "ar archive -- lipo-ing"
149                                                                set arcmd "lipo"
150                                                                foreach arch ${universal_archs} {
151                                                                        set arcmd "${arcmd} -arch $arch ${workpath}/pre-dest/${arch}/${fpath}"
152                                                                }
153                                                                set arcmd "${arcmd} -create -output ${destroot}${fpath}"
154                                                                system ${arcmd}
155                                                        }
156                                                        default {
157                                                                # unknown file types are copied IF they do not differ across ALL architectures -- if they do: This is an error!
158                                                                ui_debug "unknown filetype: ${filetype}"
159                                                               
160                                                                set any_difference no
161                                                                foreach arch ${universal_archs} {
162                                                                        if {![string equal ${arch} ${first_arch}]} {
163                                                                                set differ1 [exec "/usr/bin/diff" "-q" "${workpath}/pre-dest/${first_arch}/${fpath}" "${workpath}/pre-dest/${arch}/${fpath}"]
164                                                                                if {![string equal ${differ1} ""]} {
165                                                                                        set any_difference yes
166                                                                                }
167                                                                        }
168                                                                }
169                                                                if {${any_difference}} {
170                                                                        ui_debug "ERROR: files differ"
171                                                                } else {
172                                                                        ui_debug "files match, just copying"
173                                                                        file copy "${basepath}${fpath}" "${destroot}${fpath}"
174                                                                }
175                                                        }
176                                                }
177                                        }
178                                        default { ui_debug "serious error" }
179                                }
180                        }
181                }
182        }
183}
184
185# the test suite can only be run *after* destrooting
186#    test.run            yes
187#    test.dir            ${worksrcpath}/test
188#    test.target         alltests
Note: See TracBrowser for help on using the repository browser.