Ticket #39629: muniversal.diff

File muniversal.diff, 3.2 KB (added by neverpanic (Clemens Lang), 11 years ago)

Patch against the muniversal PortGroup executing g-ir-generate and comparing the output

  • muniversal-1.0.tcl

     
    460460        #    merger_dont_diff: list of files for which /usr/bin/diff ${diffFormat} will not merge correctly
    461461        #          diffFormat: format used by diff to merge two text files
    462462        proc merge2Dir {base1 base2 base prefixDir arch1 arch2 merger_dont_diff diffFormat} {
     463            global prefix
     464
    463465            set dir1  ${base1}/${prefixDir}
    464466            set dir2  ${base2}/${prefixDir}
    465467            set dir   ${base}/${prefixDir}
     
    580582                                                *.typelib {
    581583                                                    # Sometimes garbage ends up in ignored trailing bytes
    582584                                                    # https://trac.macports.org/ticket/39629
    583                                                     # TODO: Compare the g-ir-generate output
    584                                                     ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; assume trivial difference"
    585                                                     copy ${dir1}/${fl} ${dir}
     585                                                    # Compare the g-ir-generate output to see if the contents differ
     586                                                    set tempdir [mkdtemp "/tmp/muniversal.XXXXXXXX"]
     587                                                    set tempfile1 "${tempdir}/${arch1}-[file rootname ${fl}]"
     588                                                    set tempfile2 "${tempdir}/${arch2}-[file rootname ${fl}]"
     589                                                    system "GI_TYPELIB_PATH='[file dirname "${dir1}/${fl}"]' ${prefix}/bin/g-ir-generate \"${dir1}/${fl}\" > \"${tempfile1}\""
     590                                                    system "GI_TYPELIB_PATH='[file dirname "${dir2}/${fl}"]' ${prefix}/bin/g-ir-generate \"${dir2}/${fl}\" > \"${tempfile2}\""
     591                                                    set identical "no"
     592                                                    if {![catch {system "/usr/bin/cmp -s \"${tempfile1}\" \"${tempfile2}\""}]} {
     593                                                        # files are identical
     594                                                        ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2} but the contents are the same"
     595                                                        set identical "yes"
     596                                                        copy ${dir1}/${fl} ${dir}
     597                                                    }
     598                                                    delete ${tempfile1} ${tempfile2} ${tempdir}
     599                                                    if {${identical} eq "no"} {
     600                                                        return -code error "${prefixDir}/${fl} differs in ${base1} and ${base2} and cannot be merged"
     601                                                    }
    586602                                                }
    587603                                                *.jar {
    588604                                                    # jar files can be different because of timestamp