Ignore:
Timestamp:
Aug 20, 2013, 5:15:19 PM (6 years ago)
Author:
jeremyhu@…
Message:

muniversal: Improve flow control for known file type handling

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dports/_resources/port1.0/group/muniversal-1.0.tcl

    r109843 r109844  
    548548                                    copy -force ${dir2}/${fl} ${dir}/${arch2}-${fl}
    549549                                } else {
    550                                     set known_file "no"
    551 
    552550                                    # Text file on which diff will not give correct results.
    553551                                    switch -glob ${fl} {
     
    556554                                            # Create a sepcial module directory for each architecture.
    557555                                            # To find these modules, GFortran might require -M or -J.
    558                                             set known_file "yes"
    559556                                            file mkdir ${dir}/mods32
    560557                                            file mkdir ${dir}/mods64
     
    569566                                        *.pc -
    570567                                        *-config {
    571                                             set known_file "yes"
    572 
    573568                                            set tempdir [mkdtemp "/tmp/muniversal.XXXXXXXX"]
    574569                                            set tempfile1 "${tempdir}/${arch1}-${fl}"
     
    592587                                            delete ${tempfile1} ${tempfile2} ${tempdir}
    593588                                        }
    594                                     }
    595 
    596                                     if { ${known_file}=="no" } {
    597                                         if { ! [catch {system "/usr/bin/diff -dw ${diffFormat} \"${dir1}/${fl}\" \"${dir2}/${fl}\" > \"${dir}/${fl}\"; test \$? -le 1"} ] } {
    598                                             # diff worked
    599                                             ui_debug "universal: merge: used diff to create ${prefixDir}/${fl}"
    600                                         } else {
    601                                             # File created by diff is invalid
    602                                             delete ${dir}/${fl}
    603 
    604                                             # nothing has worked so far.
     589                                        *.la {
     590                                            if {${destroot.delete_la_files} == "yes"} {
     591                                                ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; ignoring due to delete_la_files"
     592                                            } else {
     593                                                return -code error "${prefixDir}/${fl} differs in ${base1} and ${base2} and cannot be merged"
     594                                            }
     595                                        }
     596                                        *.typelib {
     597                                            # Sometimes garbage ends up in ignored trailing bytes
     598                                            # https://trac.macports.org/ticket/39629
     599                                            # TODO: Compare the g-ir-generate output
     600                                            ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; assume trivial difference"
     601                                            copy ${dir1}/${fl} ${dir}
     602                                        }
     603                                        *.jar {
     604                                            # jar files can be different because of timestamp
     605                                            ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; assume timestamp difference"
     606                                            copy ${dir1}/${fl} ${dir}
     607                                        }
     608                                        *.elc {
     609                                            # elc files can be different because they record when and where they were built.
     610                                            ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; assume trivial difference"
     611                                            copy ${dir1}/${fl} ${dir}
     612                                        }
     613                                        *.gz -
     614                                        *.bz2 {
     615                                            # compressed files can differ due to entropy
    605616                                            switch -glob ${fl} {
    606                                                 *.la {
    607                                                     if {${destroot.delete_la_files} == "yes"} {
    608                                                         ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; ignoring due to delete_la_files"
    609                                                     } else {
    610                                                         return -code error "${prefixDir}/${fl} differs in ${base1} and ${base2} and cannot be merged"
    611                                                     }
     617                                                *.gz {
     618                                                    set cat /usr/bin/gzcat
    612619                                                }
    613                                                 *.typelib {
    614                                                     # Sometimes garbage ends up in ignored trailing bytes
    615                                                     # https://trac.macports.org/ticket/39629
    616                                                     # TODO: Compare the g-ir-generate output
    617                                                     ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; assume trivial difference"
    618                                                     copy ${dir1}/${fl} ${dir}
     620                                                *.bz2 {
     621                                                    set cat /usr/bin/bzcat
    619622                                                }
    620                                                 *.jar {
    621                                                     # jar files can be different because of timestamp
    622                                                     ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; assume timestamp difference"
    623                                                     copy ${dir1}/${fl} ${dir}
    624                                                 }
    625                                                 *.elc {
    626                                                     # elc files can be different because they record when and where they were built.
    627                                                     ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; assume trivial difference"
    628                                                     copy ${dir1}/${fl} ${dir}
    629                                                 }
    630                                                 *.gz -
    631                                                 *.bz2 {
    632                                                     # compressed files can differ due to entropy
    633                                                     switch -glob ${fl} {
    634                                                         *.gz {
    635                                                             set cat /usr/bin/gzcat
    636                                                         }
    637                                                         *.bz2 {
    638                                                             set cat /usr/bin/bzcat
    639                                                         }
    640                                                     }
    641                                                     set tempdir [mkdtemp "/tmp/muniversal.XXXXXXXX"]
    642                                                     set tempfile1 "${tempdir}/${arch1}-[file rootname ${fl}]"
    643                                                     set tempfile2 "${tempdir}/${arch2}-[file rootname ${fl}]"
    644                                                     system "${cat} \"${dir1}/${fl}\" > \"${tempfile1}\""
    645                                                     system "${cat} \"${dir2}/${fl}\" > \"${tempfile2}\""
    646                                                     set identical "no"
    647                                                     if { ! [catch {system "/usr/bin/cmp -s \"${tempfile1}\" \"${tempfile2}\""}] } {
    648                                                         # files are identical
    649                                                         ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2} but the contents are the same"
     623                                            }
     624                                            set tempdir [mkdtemp "/tmp/muniversal.XXXXXXXX"]
     625                                            set tempfile1 "${tempdir}/${arch1}-[file rootname ${fl}]"
     626                                            set tempfile2 "${tempdir}/${arch2}-[file rootname ${fl}]"
     627                                            system "${cat} \"${dir1}/${fl}\" > \"${tempfile1}\""
     628                                            system "${cat} \"${dir2}/${fl}\" > \"${tempfile2}\""
     629                                            set identical "no"
     630                                            if { ! [catch {system "/usr/bin/cmp -s \"${tempfile1}\" \"${tempfile2}\""}] } {
     631                                                # files are identical
     632                                                ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2} but the contents are the same"
     633                                                set identical "yes"
     634                                                copy ${dir1}/${fl} ${dir}
     635                                            }
     636                                            if { ${identical}=="no" } {
     637                                                switch -glob ${fl} {
     638                                                    *.el.gz {
     639                                                        # Emacs lisp files should be same across architectures
     640                                                        # the emacs package (and perhaps others) records the date of automatically generated el files
     641                                                        ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; assume trivial difference"
    650642                                                        set identical "yes"
    651643                                                        copy ${dir1}/${fl} ${dir}
    652644                                                    }
    653                                                     if { ${identical}=="no" } {
    654                                                         switch -glob ${fl} {
    655                                                             *.el.gz {
    656                                                                 # Emacs lisp files should be same across architectures
    657                                                                 # the emacs package (and perhaps others) records the date of automatically generated el files
    658                                                                 ui_debug "universal: merge: ${prefixDir}/${fl} differs in ${base1} and ${base2}; assume trivial difference"
    659                                                                 set identical "yes"
    660                                                                 copy ${dir1}/${fl} ${dir}
    661                                                             }
    662                                                         }
    663                                                     }
    664                                                     delete ${tempfile1} ${tempfile2} ${tempdir}
    665                                                     if {${identical}=="no"} {
    666                                                         return -code error "${prefixDir}/${fl} differs in ${base1} and ${base2} and cannot be merged"
    667                                                     }
    668645                                                }
    669                                                 default {
    670                                                     return -code error "${prefixDir}/${fl} differs in ${base1} and ${base2} and cannot be merged"
    671                                                 }
     646                                            }
     647                                            delete ${tempfile1} ${tempfile2} ${tempdir}
     648                                            if {${identical}=="no"} {
     649                                                return -code error "${prefixDir}/${fl} differs in ${base1} and ${base2} and cannot be merged"
     650                                            }
     651                                        }
     652                                        default {
     653                                            if { ! [catch {system "/usr/bin/diff -dw ${diffFormat} \"${dir1}/${fl}\" \"${dir2}/${fl}\" > \"${dir}/${fl}\"; test \$? -le 1"} ] } {
     654                                                # diff worked
     655                                                ui_debug "universal: merge: used diff to create ${prefixDir}/${fl}"
     656                                            } else {
     657                                                # File created by diff is invalid
     658                                                delete ${dir}/${fl}
     659                                                return -code error "${prefixDir}/${fl} differs in ${base1} and ${base2} and cannot be merged"
    672660                                            }
    673661                                        }
Note: See TracChangeset for help on using the changeset viewer.