[45899] trunk/dports/_resources/port1.0/group
mcalhoun at macports.org
mcalhoun at macports.org
Sat Jan 24 06:34:29 PST 2009
Revision: 45899
http://trac.macports.org/changeset/45899
Author: mcalhoun at macports.org
Date: 2009-01-24 06:34:26 -0800 (Sat, 24 Jan 2009)
Log Message:
-----------
Rename merge_universal-1.0.tcl --> muniversal-1.0.tcl.
lint only recognizes a-z0-9 as valid characters for a PortGroup.
Added Paths:
-----------
trunk/dports/_resources/port1.0/group/muniversal-1.0.tcl
Removed Paths:
-------------
trunk/dports/_resources/port1.0/group/merge_universal-1.0.tcl
Deleted: trunk/dports/_resources/port1.0/group/merge_universal-1.0.tcl
===================================================================
--- trunk/dports/_resources/port1.0/group/merge_universal-1.0.tcl 2009-01-24 12:51:55 UTC (rev 45898)
+++ trunk/dports/_resources/port1.0/group/merge_universal-1.0.tcl 2009-01-24 14:34:26 UTC (rev 45899)
@@ -1,315 +0,0 @@
-# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
-# merge_universal-1.0.tcl
-#
-# $Id$
-#
-# Copyright (c) 2009 The MacPorts Project,
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# 3. Neither the name of Apple Computer, Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-# User variables:
-# merger_configure_env: associative array of configure.env variables
-# merger_host: associative array of host values
-# merger_configure_args: associative array of configure.args
-# merger_dont_diff: list of file names for which diff will not work
-
-if { ! [info exists universal_archs_supported] } {
- set universal_archs_supported ${universal_archs}
-}
-
-variant universal {
- global universal_archs_to_use
-
- eval configure.args-append ${configure.universal_args}
- eval configure.cflags-append ${configure.universal_cflags}
- eval configure.cxxflags-append ${configure.universal_cxxflags}
- eval configure.ldflags-append ${configure.universal_ldflags}
- eval configure.cppflags-append ${configure.universal_cppflags}
-
- foreach arch ${universal_archs} {
- configure.cflags-delete -arch ${arch}
- configure.cxxflags-delete -arch ${arch}
- configure.ldflags-delete -arch ${arch}
- }
-
- set universal_archs_to_use {}
- foreach arch ${universal_archs} {
- set arch_ok no
- foreach archt ${universal_archs_supported} {
- if { ${arch}==${archt} } {
- set arch_ok yes
- }
- }
- if { ${arch_ok}=="yes" } {
- lappend universal_archs_to_use ${arch}
- }
- }
-
- configure {
- foreach arch ${universal_archs_to_use} {
- ui_msg "universal: Running configure for architecture ${arch}"
-
- copy ${worksrcpath} ${workpath}/${arch}
-
- # Prefer -m to -arch
- set archf "-arch ${arch}"
- if { ${os.arch}=="i386" && ${arch}=="i386" } {
- set archf -m32
- } elseif { ${os.arch}=="i386" && ${arch}=="x86_64" } {
- set archf -m64
- } elseif { ${os.arch}=="powerpc" && ${arch}=="ppc" } {
- set archf -m32
- } elseif { ${os.arch}=="powerpc" && ${arch}=="ppc64" } {
- set archf -m64
- }
- configure.cflags-append ${archf}
- configure.cxxflags-append ${archf}
- configure.ldflags-append ${archf}
-
- if { [info exists merger_configure_env(${arch})] } {
- configure.env-append $merger_configure_env(${arch})
- }
-
- # Don't set the --host unless we have to.
- set host ""
- if { ${os.arch}=="i386" && (${arch}=="ppc" || ${arch}=="ppc64") } {
- if { [info exists merger_host(${arch})] } {
- if { $merger_host(${arch}) != "" } {
- set host --host=$merger_host(${arch})
- }
- } else {
- set host --host=powerpc64-apple-darwin
- }
- } elseif { ${os.arch}=="powerpc" && (${arch}=="i386" || ${arch}=="x86_64") } {
- if { [info exists merger_host(${arch})] } {
- if { $merger_host(${arch}) != "" } {
- set host --host=$merger_host(${arch})
- }
- } else {
- set host --host=core2-apple-darwin
- }
- }
- configure.args-append ${host}
-
- if { [info exists merger_configure_args(${arch})] } {
- configure.args-append $merger_configure_args(${arch})
- }
-
- set configure_cc_save ${configure.cc}
- set configure_cxx_save ${configure.cxx}
- configure.cc ${configure.cc} ${archf}
- configure.cxx ${configure.cxx} ${archf}
-
- set worksrcpathSave ${worksrcpath}
- set worksrcpath ${workpath}/${arch}
-
- configure_main
-
- # Undo changes to the configure related variables
- set worksrcpath ${worksrcpathSave}
- configure.cc ${configure_cc_save}
- configure.cxx ${configure_cxx_save}
- if { [info exists merger_configure_args(${arch})] } {
- configure.args-delete $merger_configure_args(${arch})
- }
- configure.args-delete ${host}
- if { [info exists merger_configure_env(${arch})] } {
- configure.env-delete $merger_configure_env(${arch})
- }
- configure.ldflags-delete ${archf}
- configure.cxxflags-delete ${archf}
- configure.cflags-delete ${archf}
- }
- }
-
- build {
- foreach arch ${universal_archs_to_use} {
- ui_msg "universal: Running build for architecture ${arch}"
- build.dir ${workpath}/${arch}
- build_main
- }
- }
-
- destroot {
- foreach arch ${universal_archs_to_use} {
- ui_msg "universal: Running destroot for architecture ${arch}"
- copy ${destroot} ${workpath}/destroot-${arch}
- destroot.dir ${workpath}/${arch}
- set destdirSave ${destroot.destdir}
- destroot.destdir [string map "${destroot} ${workpath}/destroot-${arch}" ${destroot.destdir}]
- destroot_main
- destroot.destdir ${destdirSave}
- }
- delete ${destroot}
-
- # Merge ${base1}/${prefixDir} and ${base2}/${prefixDir} into dir ${base}/${prefixDir}
- # arch1, arch2: names to prepend to files if a diff merge of two files is forbiddend by merger_dont_diff
- # merger_dont_diff: list of files for which /usr/bin/diff ${diffFormat} will not merge correctly
- # diffFormat: format used by diff to merge two text files
- proc merge2Dir {base1 base2 base prefixDir arch1 arch2 merger_dont_diff diffFormat} {
- set dir1 ${base1}/${prefixDir}
- set dir2 ${base2}/${prefixDir}
- set dir ${base}/${prefixDir}
-
- xinstall -d -m 0755 ${dir}
-
- foreach fl [glob -directory ${dir2} -tails -nocomplain *] {
- if { ![file exists ${dir1}/${fl}] } {
- # File only exists in ${dir1}
- ui_debug "universal: merge: ${prefixDir}/${fl} only exists in ${base2}"
- copy ${dir2}/${fl} ${dir}
- }
- }
- foreach fl [glob -directory ${dir1} -tails -nocomplain *] {
- if { ![file exists ${dir2}/${fl}] } {
- # File only exists in ${dir2}
- ui_debug "universal: merge: ${prefixDir}/${fl} only exists in ${base1}"
- copy ${dir1}/${fl} ${dir}
- } else {
- # File exists in ${dir1} and ${dir2}
- ui_debug "universal: merge: merging ${prefixDir}/${fl} from ${base1} and ${base2}"
-
- # Ensure files are of same type
- if { [file type ${dir1}/${fl}]!=[file type ${dir2}/${fl}] } {
- error "${dir1}/${fl} and ${dir2}/${fl} are of different types"
- }
-
- if { [file type ${dir1}/${fl}]=="link" } {
- # Files are links
- ui_debug "universal: merge: ${prefixDir}/${fl} is a link"
-
- # Ensure links don't point to different things
- if { [file readlink ${dir1}/${fl}]==[file readlink ${dir2}/${fl}] } {
- copy ${dir1}/${fl} ${dir}
- } else {
- error "${dir1}/${fl} and ${dir2}/${fl} point to different targets (can't merge them)"
- }
- } elseif { [file isdirectory ${dir1}/${fl}] } {
- # Files are directories (but not links), so recursively call function
- merge2Dir ${base1} ${base2} ${base} ${prefixDir}/${fl} ${arch1} ${arch2} ${merger_dont_diff} ${diffFormat}
- } else {
- # Files are neither directories nor links
- if { ! [catch {system "/usr/bin/cmp ${dir1}/${fl} ${dir2}/${fl} && /bin/cp -v ${dir1}/${fl} ${dir}"}] } {
- # Files are byte by byte the same
- ui_debug "universal: merge: ${prefixDir}${fl} is identical in ${base1} and ${base2}"
- } else {
- # Actually try to merge the files
- # First try lipo
- if { ! [catch {system "/usr/bin/lipo -create ${dir1}/${fl} ${dir2}/${fl} -output ${dir}/${fl}"}] } {
- # lipo worked
- ui_debug "universal: merge: lipo created ${prefixDir}/${fl}"
- } else {
- # lipo has failed, so assume they are text files to be merged
- set dontdiff no
- foreach dont ${merger_dont_diff} {
- if { ${dont}=="${prefixDir}/${fl}" } {
- set dontdiff yes
- }
- }
- if { ${dontdiff}==yes } {
- # user has specified that diff does not work
- # attempt to give each file a unique name and create a new file which includes one of the original depending on the arch
-
- set fh [open ${dir}/${arch1}-${fl} w 0644]
- puts ${fh} "#include \"${arch1}-${fl}\""
- close ${fh}
-
- set fh [open ${dir}/${arch2}-${fl} w 0644]
- puts ${fh} "#include \"${arch2}-${fl}\""
- close ${fh}
-
- ui_debug "universal: merge: created ${prefixDir}/${fl} to include ${prefixDir}/${arch1}-${fl} ${prefixDir}/${arch1}-${fl}"
-
- system "/usr/bin/diff -d ${diffFormat} ${dir}/${arch1}-${fl} ${dir}/${arch2}-${fl} > ${dir}/${fl}; test \$? -le 1"
-
- copy -force ${dir1}/${fl} ${dir}/${arch1}-${fl}
- copy -force ${dir2}/${fl} ${dir}/${arch2}-${fl}
- } elseif { ! [catch {system "/usr/bin/diff -dw ${diffFormat} ${dir1}/${fl} ${dir2}/${fl} > ${dir}/${fl}; test \$? -le 1"} ] } {
- # diff worked
- ui_debug "universal: merge: used diff to create ${prefixDir}/${fl}"
- } else {
- # File created by diff is invalid
- delete ${dir}/${fl}
-
- # nothing has worked so far.
- switch -glob ${fl} {
- *.jar {
- # jar files can be different becasue of timestamp
- ui_debug "universal: merge: ${prefixDir}/${fl} is different in ${base1} and ${base2}; assume timestamp difference"
- copy ${dir1}/${fl} ${dir}
- }
- default {
- error "Can not create ${prefixDir}/${fl} from ${base1} and ${base2}"
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- # /usr/bin/diff can merge two C/C++ files
- # See http://www.gnu.org/software/diffutils/manual/html_mono/diff.html#If-then-else
- # See http://www.gnu.org/software/diffutils/manual/html_mono/diff.html#Detailed%20If-then-else
- set diffFormatProc {--old-group-format='#if (defined(__ppc__) || defined(__ppc64__))
- %<#endif /* __ppc__ || __ppc64__ */
-' \
---new-group-format='#if defined (__i386__) || defined(__x86_64__)
-%>#endif /* __i386__ || __x86_64__ */
-' \
---unchanged-group-format='%=' \
---changed-group-format='#if (defined(__ppc__) || defined(__ppc64__))
-%<#else /* ! __ppc__ && ! __ppc64__ */
-%>#endif /* __ppc__ || __ppc64__ */
-'}
-
- set diffFormatM "-D __LP64__"
-
- if { ![info exists merger_dont_diff] } {
- set merger_dont_diff {}
- }
-
- merge2Dir ${workpath}/destroot-ppc ${workpath}/destroot-ppc64 ${workpath}/destroot-powerpc "" ppc ppc64 ${merger_dont_diff} ${diffFormatM}
- merge2Dir ${workpath}/destroot-i386 ${workpath}/destroot-x86_64 ${workpath}/destroot-intel "" i386 x86_64 ${merger_dont_diff} ${diffFormatM}
- merge2Dir ${workpath}/destroot-powerpc ${workpath}/destroot-intel ${workpath}/destroot "" powerpc x86 ${merger_dont_diff} ${diffFormatProc}
- }
-
- test {
- foreach arch ${universal_archs_to_use} {
- # Rosetta does not translate G5 instructions
- # PowerPC systems can't translate Intel instructions
- if { (${os.arch}=="i386" && ${arch}!="ppc64") || (${os.arch}=="powerpc" && ${arch}!="i386" && ${arch}!="x86_64") } {
- ui_msg "universal: Running test for architecture ${arch}"
- test.dir ${workpath}/${arch}
- test_main
- }
- }
- }
-}
Copied: trunk/dports/_resources/port1.0/group/muniversal-1.0.tcl (from rev 45898, trunk/dports/_resources/port1.0/group/merge_universal-1.0.tcl)
===================================================================
--- trunk/dports/_resources/port1.0/group/muniversal-1.0.tcl (rev 0)
+++ trunk/dports/_resources/port1.0/group/muniversal-1.0.tcl 2009-01-24 14:34:26 UTC (rev 45899)
@@ -0,0 +1,315 @@
+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
+# merge_universal-1.0.tcl
+#
+# $Id$
+#
+# Copyright (c) 2009 The MacPorts Project,
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. Neither the name of Apple Computer, Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# User variables:
+# merger_configure_env: associative array of configure.env variables
+# merger_host: associative array of host values
+# merger_configure_args: associative array of configure.args
+# merger_dont_diff: list of file names for which diff will not work
+
+if { ! [info exists universal_archs_supported] } {
+ set universal_archs_supported ${universal_archs}
+}
+
+variant universal {
+ global universal_archs_to_use
+
+ eval configure.args-append ${configure.universal_args}
+ eval configure.cflags-append ${configure.universal_cflags}
+ eval configure.cxxflags-append ${configure.universal_cxxflags}
+ eval configure.ldflags-append ${configure.universal_ldflags}
+ eval configure.cppflags-append ${configure.universal_cppflags}
+
+ foreach arch ${universal_archs} {
+ configure.cflags-delete -arch ${arch}
+ configure.cxxflags-delete -arch ${arch}
+ configure.ldflags-delete -arch ${arch}
+ }
+
+ set universal_archs_to_use {}
+ foreach arch ${universal_archs} {
+ set arch_ok no
+ foreach archt ${universal_archs_supported} {
+ if { ${arch}==${archt} } {
+ set arch_ok yes
+ }
+ }
+ if { ${arch_ok}=="yes" } {
+ lappend universal_archs_to_use ${arch}
+ }
+ }
+
+ configure {
+ foreach arch ${universal_archs_to_use} {
+ ui_msg "universal: Running configure for architecture ${arch}"
+
+ copy ${worksrcpath} ${workpath}/${arch}
+
+ # Prefer -m to -arch
+ set archf "-arch ${arch}"
+ if { ${os.arch}=="i386" && ${arch}=="i386" } {
+ set archf -m32
+ } elseif { ${os.arch}=="i386" && ${arch}=="x86_64" } {
+ set archf -m64
+ } elseif { ${os.arch}=="powerpc" && ${arch}=="ppc" } {
+ set archf -m32
+ } elseif { ${os.arch}=="powerpc" && ${arch}=="ppc64" } {
+ set archf -m64
+ }
+ configure.cflags-append ${archf}
+ configure.cxxflags-append ${archf}
+ configure.ldflags-append ${archf}
+
+ if { [info exists merger_configure_env(${arch})] } {
+ configure.env-append $merger_configure_env(${arch})
+ }
+
+ # Don't set the --host unless we have to.
+ set host ""
+ if { ${os.arch}=="i386" && (${arch}=="ppc" || ${arch}=="ppc64") } {
+ if { [info exists merger_host(${arch})] } {
+ if { $merger_host(${arch}) != "" } {
+ set host --host=$merger_host(${arch})
+ }
+ } else {
+ set host --host=powerpc64-apple-darwin
+ }
+ } elseif { ${os.arch}=="powerpc" && (${arch}=="i386" || ${arch}=="x86_64") } {
+ if { [info exists merger_host(${arch})] } {
+ if { $merger_host(${arch}) != "" } {
+ set host --host=$merger_host(${arch})
+ }
+ } else {
+ set host --host=core2-apple-darwin
+ }
+ }
+ configure.args-append ${host}
+
+ if { [info exists merger_configure_args(${arch})] } {
+ configure.args-append $merger_configure_args(${arch})
+ }
+
+ set configure_cc_save ${configure.cc}
+ set configure_cxx_save ${configure.cxx}
+ configure.cc ${configure.cc} ${archf}
+ configure.cxx ${configure.cxx} ${archf}
+
+ set worksrcpathSave ${worksrcpath}
+ set worksrcpath ${workpath}/${arch}
+
+ configure_main
+
+ # Undo changes to the configure related variables
+ set worksrcpath ${worksrcpathSave}
+ configure.cc ${configure_cc_save}
+ configure.cxx ${configure_cxx_save}
+ if { [info exists merger_configure_args(${arch})] } {
+ configure.args-delete $merger_configure_args(${arch})
+ }
+ configure.args-delete ${host}
+ if { [info exists merger_configure_env(${arch})] } {
+ configure.env-delete $merger_configure_env(${arch})
+ }
+ configure.ldflags-delete ${archf}
+ configure.cxxflags-delete ${archf}
+ configure.cflags-delete ${archf}
+ }
+ }
+
+ build {
+ foreach arch ${universal_archs_to_use} {
+ ui_msg "universal: Running build for architecture ${arch}"
+ build.dir ${workpath}/${arch}
+ build_main
+ }
+ }
+
+ destroot {
+ foreach arch ${universal_archs_to_use} {
+ ui_msg "universal: Running destroot for architecture ${arch}"
+ copy ${destroot} ${workpath}/destroot-${arch}
+ destroot.dir ${workpath}/${arch}
+ set destdirSave ${destroot.destdir}
+ destroot.destdir [string map "${destroot} ${workpath}/destroot-${arch}" ${destroot.destdir}]
+ destroot_main
+ destroot.destdir ${destdirSave}
+ }
+ delete ${destroot}
+
+ # Merge ${base1}/${prefixDir} and ${base2}/${prefixDir} into dir ${base}/${prefixDir}
+ # arch1, arch2: names to prepend to files if a diff merge of two files is forbiddend by merger_dont_diff
+ # merger_dont_diff: list of files for which /usr/bin/diff ${diffFormat} will not merge correctly
+ # diffFormat: format used by diff to merge two text files
+ proc merge2Dir {base1 base2 base prefixDir arch1 arch2 merger_dont_diff diffFormat} {
+ set dir1 ${base1}/${prefixDir}
+ set dir2 ${base2}/${prefixDir}
+ set dir ${base}/${prefixDir}
+
+ xinstall -d -m 0755 ${dir}
+
+ foreach fl [glob -directory ${dir2} -tails -nocomplain *] {
+ if { ![file exists ${dir1}/${fl}] } {
+ # File only exists in ${dir1}
+ ui_debug "universal: merge: ${prefixDir}/${fl} only exists in ${base2}"
+ copy ${dir2}/${fl} ${dir}
+ }
+ }
+ foreach fl [glob -directory ${dir1} -tails -nocomplain *] {
+ if { ![file exists ${dir2}/${fl}] } {
+ # File only exists in ${dir2}
+ ui_debug "universal: merge: ${prefixDir}/${fl} only exists in ${base1}"
+ copy ${dir1}/${fl} ${dir}
+ } else {
+ # File exists in ${dir1} and ${dir2}
+ ui_debug "universal: merge: merging ${prefixDir}/${fl} from ${base1} and ${base2}"
+
+ # Ensure files are of same type
+ if { [file type ${dir1}/${fl}]!=[file type ${dir2}/${fl}] } {
+ error "${dir1}/${fl} and ${dir2}/${fl} are of different types"
+ }
+
+ if { [file type ${dir1}/${fl}]=="link" } {
+ # Files are links
+ ui_debug "universal: merge: ${prefixDir}/${fl} is a link"
+
+ # Ensure links don't point to different things
+ if { [file readlink ${dir1}/${fl}]==[file readlink ${dir2}/${fl}] } {
+ copy ${dir1}/${fl} ${dir}
+ } else {
+ error "${dir1}/${fl} and ${dir2}/${fl} point to different targets (can't merge them)"
+ }
+ } elseif { [file isdirectory ${dir1}/${fl}] } {
+ # Files are directories (but not links), so recursively call function
+ merge2Dir ${base1} ${base2} ${base} ${prefixDir}/${fl} ${arch1} ${arch2} ${merger_dont_diff} ${diffFormat}
+ } else {
+ # Files are neither directories nor links
+ if { ! [catch {system "/usr/bin/cmp ${dir1}/${fl} ${dir2}/${fl} && /bin/cp -v ${dir1}/${fl} ${dir}"}] } {
+ # Files are byte by byte the same
+ ui_debug "universal: merge: ${prefixDir}${fl} is identical in ${base1} and ${base2}"
+ } else {
+ # Actually try to merge the files
+ # First try lipo
+ if { ! [catch {system "/usr/bin/lipo -create ${dir1}/${fl} ${dir2}/${fl} -output ${dir}/${fl}"}] } {
+ # lipo worked
+ ui_debug "universal: merge: lipo created ${prefixDir}/${fl}"
+ } else {
+ # lipo has failed, so assume they are text files to be merged
+ set dontdiff no
+ foreach dont ${merger_dont_diff} {
+ if { ${dont}=="${prefixDir}/${fl}" } {
+ set dontdiff yes
+ }
+ }
+ if { ${dontdiff}==yes } {
+ # user has specified that diff does not work
+ # attempt to give each file a unique name and create a new file which includes one of the original depending on the arch
+
+ set fh [open ${dir}/${arch1}-${fl} w 0644]
+ puts ${fh} "#include \"${arch1}-${fl}\""
+ close ${fh}
+
+ set fh [open ${dir}/${arch2}-${fl} w 0644]
+ puts ${fh} "#include \"${arch2}-${fl}\""
+ close ${fh}
+
+ ui_debug "universal: merge: created ${prefixDir}/${fl} to include ${prefixDir}/${arch1}-${fl} ${prefixDir}/${arch1}-${fl}"
+
+ system "/usr/bin/diff -d ${diffFormat} ${dir}/${arch1}-${fl} ${dir}/${arch2}-${fl} > ${dir}/${fl}; test \$? -le 1"
+
+ copy -force ${dir1}/${fl} ${dir}/${arch1}-${fl}
+ copy -force ${dir2}/${fl} ${dir}/${arch2}-${fl}
+ } elseif { ! [catch {system "/usr/bin/diff -dw ${diffFormat} ${dir1}/${fl} ${dir2}/${fl} > ${dir}/${fl}; test \$? -le 1"} ] } {
+ # diff worked
+ ui_debug "universal: merge: used diff to create ${prefixDir}/${fl}"
+ } else {
+ # File created by diff is invalid
+ delete ${dir}/${fl}
+
+ # nothing has worked so far.
+ switch -glob ${fl} {
+ *.jar {
+ # jar files can be different becasue of timestamp
+ ui_debug "universal: merge: ${prefixDir}/${fl} is different in ${base1} and ${base2}; assume timestamp difference"
+ copy ${dir1}/${fl} ${dir}
+ }
+ default {
+ error "Can not create ${prefixDir}/${fl} from ${base1} and ${base2}"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ # /usr/bin/diff can merge two C/C++ files
+ # See http://www.gnu.org/software/diffutils/manual/html_mono/diff.html#If-then-else
+ # See http://www.gnu.org/software/diffutils/manual/html_mono/diff.html#Detailed%20If-then-else
+ set diffFormatProc {--old-group-format='#if (defined(__ppc__) || defined(__ppc64__))
+ %<#endif /* __ppc__ || __ppc64__ */
+' \
+--new-group-format='#if defined (__i386__) || defined(__x86_64__)
+%>#endif /* __i386__ || __x86_64__ */
+' \
+--unchanged-group-format='%=' \
+--changed-group-format='#if (defined(__ppc__) || defined(__ppc64__))
+%<#else /* ! __ppc__ && ! __ppc64__ */
+%>#endif /* __ppc__ || __ppc64__ */
+'}
+
+ set diffFormatM "-D __LP64__"
+
+ if { ![info exists merger_dont_diff] } {
+ set merger_dont_diff {}
+ }
+
+ merge2Dir ${workpath}/destroot-ppc ${workpath}/destroot-ppc64 ${workpath}/destroot-powerpc "" ppc ppc64 ${merger_dont_diff} ${diffFormatM}
+ merge2Dir ${workpath}/destroot-i386 ${workpath}/destroot-x86_64 ${workpath}/destroot-intel "" i386 x86_64 ${merger_dont_diff} ${diffFormatM}
+ merge2Dir ${workpath}/destroot-powerpc ${workpath}/destroot-intel ${workpath}/destroot "" powerpc x86 ${merger_dont_diff} ${diffFormatProc}
+ }
+
+ test {
+ foreach arch ${universal_archs_to_use} {
+ # Rosetta does not translate G5 instructions
+ # PowerPC systems can't translate Intel instructions
+ if { (${os.arch}=="i386" && ${arch}!="ppc64") || (${os.arch}=="powerpc" && ${arch}!="i386" && ${arch}!="x86_64") } {
+ ui_msg "universal: Running test for architecture ${arch}"
+ test.dir ${workpath}/${arch}
+ test_main
+ }
+ }
+ }
+}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090124/1f0cc5e1/attachment-0001.html>
More information about the macports-changes
mailing list