Changes in / [f9feab8:90152a4]


Ignore:
Files:
915 added
670 deleted
163 edited

Legend:

Unmodified
Added
Removed
  • .gitignore

    rf9feab8 r90152a4  
    88config.status
    99config.log
     10config.py
    1011stamp-h1
    11 Makefile
    12 driver/Makefile
    13 libcfa/Makefile
    14 src/Makefile
     12/Makefile
     13**/Makefile
    1514/version
    1615
     
    2524include
    2625share
     26build
    2727*.class
    2828
    2929# src executables, for lib and bin
    30 src/driver/cc1
    31 src/driver/cfa
    32 src/driver/cfa-cpp
     30driver/as
     31driver/cfa
     32driver/cfa-cpp
     33driver/cc1
    3334
    34 src/prelude/builtins.cf
    35 src/prelude/gcc-builtins.cf
    36 src/prelude/gcc-builtins.c
    37 src/prelude/extras.cf
    38 src/prelude/bootloader.c
    39 src/libcfa/libcfa-prelude.c
     35libcfa/prelude/bootloader.c
     36libcfa/prelude/builtins.cf
     37libcfa/prelude/extras.cf
     38libcfa/prelude/gcc-builtins.cf
     39libcfa/prelude/gcc-builtins.c
     40libcfa/prelude/prelude.cf
     41libcfa/x64-debug/
     42libcfa/x64-nodebug/
     43libcfa/x64-nolib/
     44libcfa/x86-debug/
     45libcfa/x86-nodebug/
     46libcfa/x86-nolib/
     47libcfa/arm-debug/
     48libcfa/arm-nodebug/
     49libcfa/arm-nolib/
     50
    4051
    4152# generated by bison and lex from parser.yy and lex.ll
  • Jenkins/FullBuild

    rf9feab8 r90152a4  
    2121                                        gcc_5_x64: { trigger_build( 'gcc-5',   'x64', false ) },
    2222                                        gcc_5_x86: { trigger_build( 'gcc-5',   'x86', false ) },
    23                                         gcc_4_x64: { trigger_build( 'gcc-4.9', 'x64', false ) },
    24                                         gcc_4_x86: { trigger_build( 'gcc-4.9', 'x86', false ) },
    2523                                        clang_x64: { trigger_build( 'clang',   'x64', false ) },
    2624                                        clang_x86: { trigger_build( 'clang',   'x86', false ) },
     
    6361                parameters: [                                           \
    6462                        [$class: 'StringParameterValue',                \
    65                           name: 'pCompiler',                            \
     63                          name: 'Compiler',                             \
    6664                          value: cc],                                   \
    6765                        [$class: 'StringParameterValue',                \
    68                           name: 'pArchitecture',                        \
     66                          name: 'Architecture',                         \
    6967                          value: arch],                                 \
    7068                        [$class: 'BooleanParameterValue',               \
    71                           name: 'pRunAllTests',                         \
     69                          name: 'RunAllTests',                          \
    7270                          value: true],                                         \
    7371                        [$class: 'BooleanParameterValue',               \
    74                           name: 'pRunBenchmark',                        \
     72                          name: 'RunBenchmark',                         \
    7573                          value: true],                                         \
    7674                        [$class: 'BooleanParameterValue',               \
    77                           name: 'pBuildDocumentation',          \
     75                          name: 'BuildDocumentation',           \
    7876                          value: true],                                         \
    7977                        [$class: 'BooleanParameterValue',               \
    80                           name: 'pPublish',                             \
    81                           value: publish],                                      \
     78                          name: 'Publish',                              \
     79                          value: publish],                              \
    8280                        [$class: 'BooleanParameterValue',               \
    83                           name: 'pSilent',                              \
     81                          name: 'Silent',                               \
    8482                          value: true],                                         \
    8583                ],                                                              \
     
    8987
    9088        if(result.result != 'SUCCESS') {
    91                 sh("wget -q -O - ${result.absoluteUrl}/consoleText")
     89                sh("wget -q -O - http://localhost:8084/jenkins/job/Cforall/job/master/${result.number}/consoleText")
    9290                error(result.result)
    9391        }
  • Jenkins/TestRegen

    rf9feab8 r90152a4  
    3333                        email()
    3434                }
    35         } 
     35        }
    3636        catch (Exception caughtError) {
    3737                email_error()
     
    6565
    6666        def install_dir = pwd tmp: true
    67                
     67
    6868        //Configure the conpilation (Output is not relevant)
    6969        //Use the current directory as the installation target so nothing
     
    101101                def email_subject = "[cforall dashboard][TEST REGEN# ${env.BUILD_NUMBER}] - Result"
    102102                def email_body = """This is an automated email from the Jenkins build machine. It was
    103 generated http://plg2:8082/dashboard.
     103generated https://cforall.uwaterloo.ca:8082/dashboard.html.
    104104
    105105Please apply the required changes using the following method :
     
    118118        def email_subject = "[cforall dashboard][TEST REGEN# ${env.BUILD_NUMBER}] - FAILURE"
    119119        def email_body = """This is an automated email from the Jenkins build machine. It was
    120 generated http://plg2:8082/dashboard.
     120generated https://cforall.uwaterloo.ca:8082/dashboard.html.
    121121
    122122Test generation encoutered an error please see attached logs
  • Jenkinsfile

    rf9feab8 r90152a4  
    66node ('master'){
    77
    8         boolean bIsSandbox = env.BRANCH_NAME == "jenkins-sandbox"
     8        // Globals
     9        BuildDir  = pwd tmp: true
     10        SrcDir    = pwd tmp: false
     11        Settings  = null
     12        StageName = ''
     13
     14        // Local variables
    915        def err = null
    1016        def log_needed = false
    11 
    12         stage_name              = ''
    13 
    14         compiler                = null
    15         arch_name               = ''
    16         architecture    = ''
    17 
    18         do_alltests             = false
    19         do_benchmark    = false
    20         do_doc          = false
    21         do_publish              = false
    22         do_sendemail    = true
    2317
    2418        currentBuild.result = "SUCCESS"
     
    3024                        notify_server(0)
    3125
    32                         prepare_build()
     26                        Settings = prepare_build()
     27
     28                        clean()
    3329
    3430                        checkout()
     
    4137
    4238                        benchmark()
    43 
    44                         clean()
    4539
    4640                        build_doc()
     
    5852                err = caughtError
    5953
     54                echo err.toString()
     55
    6056                //An error has occured, the build log is relevent
    6157                log_needed = true
    6258
    6359                //Store the result of the build log
    64                 currentBuild.result = "${stage_name} FAILURE".trim()
     60                currentBuild.result = "${StageName} FAILURE".trim()
    6561        }
    6662
    6763        finally {
    6864                //Send email with final results if this is not a full build
    69                 if( do_sendemail && !bIsSandbox ) {
    70                         echo 'Notifying users of result'
    71                         email(currentBuild.result, log_needed)
     65                if( Settings && !Settings.Silent ) {
     66                        email(log_needed, Settings.IsSandbox)
    7267                }
    7368
     
    8277
    8378//===========================================================================================================
    84 // Helper classes/variables/routines
    85 //===========================================================================================================
    86 //Helper routine to collect information about the git history
    87 def collect_git_info() {
    88 
    89         checkout scm
    90 
    91         //create the temporary output directory in case it doesn't already exist
    92         def out_dir = pwd tmp: true
    93         sh "mkdir -p ${out_dir}"
    94 
    95         //parse git logs to find what changed
    96         gitRefName = env.BRANCH_NAME
    97         sh "git reflog > ${out_dir}/GIT_COMMIT"
    98         git_reflog = readFile("${out_dir}/GIT_COMMIT")
    99         gitRefOldValue = (git_reflog =~ /moving from (.+) to (.+)/)[0][1]
    100         gitRefNewValue = (git_reflog =~ /moving from (.+) to (.+)/)[0][2]
    101 }
    102 
    103 def prepare_build() {
    104         properties ([                                                                                                   \
    105                 [$class: 'ParametersDefinitionProperty',                                                                \
    106                         parameterDefinitions: [                                                                         \
    107                                 [$class: 'ChoiceParameterDefinition',                                           \
    108                                         description: 'Which compiler to use',                                   \
    109                                         name: 'pCompiler',                                                              \
    110                                         choices: 'gcc-6\ngcc-5\ngcc-4.9\nclang',                                        \
    111                                         defaultValue: 'gcc-6',                                                          \
    112                                 ],                                                                                              \
    113                                 [$class: 'ChoiceParameterDefinition',                                           \
    114                                         description: 'The target architecture',                                 \
    115                                         name: 'pArchitecture',                                                          \
    116                                         choices: 'x64\nx86',                                                            \
    117                                         defaultValue: 'x64',                                                            \
    118                                 ],                                                                                              \
    119                                 [$class: 'BooleanParameterDefinition',                                                  \
    120                                         description: 'If false, only the quick test suite is ran',              \
    121                                         name: 'pRunAllTests',                                                           \
    122                                         defaultValue: false,                                                            \
    123                                 ],                                                                                              \
    124                                 [$class: 'BooleanParameterDefinition',                                                  \
    125                                         description: 'If true, jenkins also runs benchmarks',           \
    126                                         name: 'pRunBenchmark',                                                          \
    127                                         defaultValue: true,                                                             \
    128                                 ],                                                                                              \
    129                                 [$class: 'BooleanParameterDefinition',                                                  \
    130                                         description: 'If true, jenkins also builds documentation',              \
    131                                         name: 'pBuildDocumentation',                                                    \
    132                                         defaultValue: true,                                                             \
    133                                 ],                                                                                              \
    134                                 [$class: 'BooleanParameterDefinition',                                                  \
    135                                         description: 'If true, jenkins also publishes results',                 \
    136                                         name: 'pPublish',                                                               \
    137                                         defaultValue: false,                                                            \
    138                                 ],                                                                                              \
    139                                 [$class: 'BooleanParameterDefinition',                                                  \
    140                                         description: 'If true, jenkins will not send emails',           \
    141                                         name: 'pSilent',                                                                        \
    142                                         defaultValue: false,                                                            \
    143                                 ],                                                                                              \
    144                         ],
    145                 ]])
    146 
    147         compiler                = compiler_from_params( pCompiler )
    148         arch_name               = pArchitecture
    149         architecture    = architecture_from_params( arch_name )
    150 
    151         do_alltests             = (pRunAllTests == 'true')
    152         do_benchmark    = (pRunBenchmark == 'true')
    153         do_doc          = (pBuildDocumentation == 'true')
    154         do_publish              = (pPublish == 'true')
    155         do_sendemail    = ! (pSilent == 'true')
    156 
    157         echo """Compiler              : ${compiler.cc_name} (${compiler.cpp_cc}/${compiler.cfa_cc})
    158 Architecture            : ${arch_name}
    159 Arc Flags               : ${architecture}
    160 Run All Tests           : ${ pRunAllTests.toString() }
    161 Run Benchmark           : ${ pRunBenchmark.toString() }
    162 Build Documentation     : ${ pBuildDocumentation.toString() }
    163 Publish                 : ${ pPublish.toString() }
    164 Silent                  : ${ pSilent.toString() }
    165 """
    166 
    167         collect_git_info()
    168 }
    169 
    170 def build_stage(String name, Closure block ) {
    171         stage_name = name
    172         stage(name, block)
    173 }
    174 
    175 def notify_server(int wait) {
    176         sh """curl --silent --data "wait=${wait}" -X POST http://plg2:8082/jenkins/notify > /dev/null || true"""
    177         return
    178 }
    179 
    180 def make_doc() {
    181         def err = null
    182         try {
    183                 sh 'make clean > /dev/null'
    184                 sh 'make > /dev/null 2>&1'
    185         }
    186         catch (Exception caughtError) {
    187                 err = caughtError //rethrow error later
    188                 sh 'cat *.log'
    189         }
    190         finally {
    191                 if (err) throw err // Must re-throw exception to propagate error
    192         }
    193 }
    194 
    195 //Description of a compiler (Must be serializable since pipelines are persistent)
    196 class CC_Desc implements Serializable {
    197         public String cc_name
    198         public String cpp_cc
    199         public String cfa_cc
    200 
    201         CC_Desc(String cc_name, String cpp_cc, String cfa_cc) {
    202                 this.cc_name = cc_name
    203                 this.cpp_cc = cpp_cc
    204                 this.cfa_cc = cfa_cc
    205         }
    206 }
    207 
    208 def compiler_from_params(cc) {
    209         switch( cc ) {
    210                 case 'gcc-6':
    211                         return new CC_Desc('gcc-6', 'g++-6', 'gcc-6')
    212                 break
    213                 case 'gcc-5':
    214                         return new CC_Desc('gcc-5', 'g++-5', 'gcc-5')
    215                 break
    216                 case 'gcc-4.9':
    217                         return new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9')
    218                 break
    219                 case 'clang':
    220                         return new CC_Desc('clang', 'clang++', 'gcc-6')
    221                 break
    222                 default :
    223                         error "Unhandled compiler : ${cc}"
    224         }
    225 }
    226 
    227 def architecture_from_params( arch ) {
    228         switch( arch ) {
    229                 case 'x64':
    230                         return '--host=x86_64'
    231                 break
    232                 case 'x86':
    233                         return '--host=i386'
    234                 break
    235                 default :
    236                         error "Unhandled architecture : ${arch}"
    237         }
    238 }
    239 
    240 //===========================================================================================================
    24179// Main compilation routines
    24280//===========================================================================================================
     81def clean() {
     82        build_stage('Cleanup') {
     83                // clean the build by wipping the build directory
     84                dir(BuildDir) {
     85                        deleteDir()
     86                }
     87        }
     88}
     89
    24390//Compilation script is done here but environnement set-up and error handling is done in main loop
    24491def checkout() {
    24592        build_stage('Checkout') {
    24693                //checkout the source code and clean the repo
    247                 checkout scm
    248 
    249                 //Clean all temporary files to make sure no artifacts of the previous build remain
    250                 sh 'git clean -fdqx'
    251 
    252                 //Reset the git repo so no local changes persist
    253                 sh 'git reset --hard'
     94                final scmVars = checkout scm
     95                Settings.GitNewRef = scmVars.GIT_COMMIT
     96                Settings.GitOldRef = scmVars.GIT_PREVIOUS_COMMIT
     97
     98                echo GitLogMessage()
    25499        }
    255100}
     
    257102def build() {
    258103        build_stage('Build') {
    259 
    260                 def install_dir = pwd tmp: true
    261 
    262                 //Configure the conpilation (Output is not relevant)
    263                 //Use the current directory as the installation target so nothing
    264                 //escapes the sandbox
    265                 //Also specify the compiler by hand
    266                 sh "./configure CXX=${compiler.cpp_cc} ${architecture} --with-backend-compiler=${compiler.cfa_cc} --prefix=${install_dir} --enable-silent-rules --quiet"
    267 
    268                 //Compile the project
    269                 sh 'make -j 8 --no-print-directory V=0 install'
     104                // Build outside of the src tree to ease cleaning
     105                dir (BuildDir) {
     106                        //Configure the conpilation (Output is not relevant)
     107                        //Use the current directory as the installation target so nothing escapes the sandbox
     108                        //Also specify the compiler by hand
     109                        targets=""
     110                        if( Settings.RunAllTests ) {
     111                                targets="--with-target-hosts='host:debug,host:nodebug'"
     112                        } else {
     113                                targets="--with-target-hosts='host:debug'"
     114                        }
     115
     116                        sh "${SrcDir}/configure CXX=${Settings.Compiler.cpp_cc} ${Settings.Architecture.flags} ${targets} --with-backend-compiler=${Settings.Compiler.cfa_cc} --quiet"
     117
     118                        //Compile the project
     119                        sh 'make -j 8 --no-print-directory'
     120                }
    270121        }
    271122}
     
    274125        build_stage('Test') {
    275126
    276                 //Run the tests from the tests directory
    277                 if ( do_alltests ) {
    278                         sh 'make -C src/tests all-tests debug=yes --no-print-directory'
    279                         sh 'make -C src/tests all-tests debug=no --no-print-directory'
    280                 }
    281                 else {
    282                         sh 'make -C src/tests --no-print-directory'
     127                dir (BuildDir) {
     128                        //Run the tests from the tests directory
     129                        if ( Settings.RunAllTests ) {
     130                                sh 'make --no-print-directory -C tests all-tests debug=yes'
     131                                sh 'make --no-print-directory -C tests all-tests debug=no '
     132                        }
     133                        else {
     134                                sh 'make --no-print-directory -C tests'
     135                        }
    283136                }
    284137        }
     
    288141        build_stage('Benchmark') {
    289142
    290                 if( !do_benchmark ) return
    291 
    292                 //Append bench results
    293                 sh 'make -C src/benchmark --no-print-directory jenkins githash=' + gitRefNewValue + ' arch=' + arch_name + ' | tee bench.json'
    294         }
    295 }
    296 
    297 def clean() {
    298         build_stage('Cleanup') {
    299 
    300                 //do a maintainer-clean to make sure we need to remake from scratch
    301                 sh 'make maintainer-clean > /dev/null'
     143                if( !Settings.RunBenchmark ) return
     144
     145                dir (BuildDir) {
     146                        //Append bench results
     147                        sh "make --no-print-directory -C benchmark jenkins githash=${Settings.GitNewRef} arch=${Settings.Architecture} | tee ${SrcDir}/bench.json"
     148                }
    302149        }
    303150}
     
    306153        build_stage('Documentation') {
    307154
    308                 if( !do_doc ) return
     155                if( !Settings.BuildDocumentation ) return
    309156
    310157                dir ('doc/user') {
     
    321168        build_stage('Publish') {
    322169
    323                 if( !do_publish ) return
     170                if( !Settings.Publish ) return
    324171
    325172                //Then publish the results
    326                 sh 'curl -H "Content-Type: application/json" --silent --data @bench.json http://plg2:8082/jenkins/publish > /dev/null || true'
     173                sh 'curl --silent --show-error -H \'Content-Type: application/json\' --data @bench.json https://cforall.uwaterloo.ca:8082/jenkins/publish > /dev/null || true'
    327174        }
    328175}
     
    331178//Routine responsible of sending the email notification once the build is completed
    332179//===========================================================================================================
    333 //Standard build email notification
    334 def email(String status, boolean log) {
    335         //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line
    336         //Configurations for email format
    337         def project_name = (env.JOB_NAME =~ /(.+)\/.+/)[0][1].toLowerCase()
    338 
    339         def gitLog = 'Error retrieving git logs'
    340         def gitDiff = 'Error retrieving git diff'
    341 
    342         try {
    343 
    344                 sh "git rev-list --format=short ${gitRefOldValue}...${gitRefNewValue} > GIT_LOG"
    345                 gitLog = readFile('GIT_LOG')
    346 
    347                 sh "git diff --stat ${gitRefNewValue} ${gitRefOldValue} > GIT_DIFF"
    348                 gitDiff = readFile('GIT_DIFF')
    349         }
    350         catch (Exception error) {}
    351 
    352         def email_subject = "[${project_name} git][BUILD# ${env.BUILD_NUMBER} - ${status}] - branch ${env.BRANCH_NAME}"
    353         def email_body = """This is an automated email from the Jenkins build machine. It was
    354 generated because of a git hooks/post-receive script following
    355 a ref change was pushed to the repository containing
    356 the project "UNNAMED PROJECT".
    357 
     180def GitLogMessage() {
     181        if (!Settings || !Settings.GitOldRef || !Settings.GitNewRef) return "\nERROR retrieveing git information!\n"
     182
     183        sh "${SrcDir}/tools/PrettyGitLogs.sh ${BuildDir} ${Settings.GitOldRef} ${Settings.GitNewRef}"
     184
     185        def gitUpdate = readFile("${BuildDir}/GIT_UPDATE")
     186        def gitLog    = readFile("${BuildDir}/GIT_LOG")
     187        def gitDiff   = readFile("${BuildDir}/GIT_DIFF")
     188
     189        return """
    358190The branch ${env.BRANCH_NAME} has been updated.
    359    via  ${gitRefOldValue} (commit)
    360   from  ${gitRefNewValue} (commit)
     191${gitUpdate}
    361192
    362193Check console output at ${env.BUILD_URL} to view the results.
     
    364195- Status --------------------------------------------------------------
    365196
    366 BUILD# ${env.BUILD_NUMBER} - ${status}
     197BUILD# ${env.BUILD_NUMBER} - ${currentBuild.result}
    367198
    368199- Log -----------------------------------------------------------------
     
    372203${gitDiff}
    373204"""
     205}
     206
     207//Standard build email notification
     208def email(boolean log, boolean bIsSandbox) {
     209        //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line
     210        //Configurations for email format
     211        echo 'Notifying users of result'
     212
     213        def project_name = (env.JOB_NAME =~ /(.+)\/.+/)[0][1].toLowerCase()
     214        def email_subject = "[${project_name} git][BUILD# ${env.BUILD_NUMBER} - ${currentBuild.result}] - branch ${env.BRANCH_NAME}"
     215        def email_body = """This is an automated email from the Jenkins build machine. It was
     216generated because of a git hooks/post-receive script following
     217a ref change which was pushed to the Cforall repository.
     218""" + GitLogMessage()
    374219
    375220        def email_to = "cforall@lists.uwaterloo.ca"
    376221
    377         //send email notification
    378         emailext body: email_body, subject: email_subject, to: email_to, attachLog: log
    379 }
     222        if( Settings && !Settings.IsSandbox ) {
     223                //send email notification
     224                emailext body: email_body, subject: email_subject, to: email_to, attachLog: log
     225        } else {
     226                echo "Would send email to: ${email_to}"
     227                echo "With title: ${email_subject}"
     228                echo "Content: \n${email_body}"
     229        }
     230}
     231
     232//===========================================================================================================
     233// Helper classes/variables/routines
     234//===========================================================================================================
     235//Description of a compiler (Must be serializable since pipelines are persistent)
     236class CC_Desc implements Serializable {
     237        public String cc_name
     238        public String cpp_cc
     239        public String cfa_cc
     240
     241        CC_Desc(String cc_name, String cpp_cc, String cfa_cc) {
     242                this.cc_name = cc_name
     243                this.cpp_cc = cpp_cc
     244                this.cfa_cc = cfa_cc
     245        }
     246}
     247
     248//Description of an architecture (Must be serializable since pipelines are persistent)
     249class Arch_Desc implements Serializable {
     250        public String name
     251        public String flags
     252
     253        Arch_Desc(String name, String flags) {
     254                this.name  = name
     255                this.flags = flags
     256        }
     257}
     258
     259class BuildSettings implements Serializable {
     260        public final CC_Desc Compiler
     261        public final Arch_Desc Architecture
     262        public final Boolean RunAllTests
     263        public final Boolean RunBenchmark
     264        public final Boolean BuildDocumentation
     265        public final Boolean Publish
     266        public final Boolean Silent
     267        public final Boolean IsSandbox
     268        public final String DescLong
     269        public final String DescShort
     270
     271        public String GitNewRef
     272        public String GitOldRef
     273
     274        BuildSettings(java.util.Collections$UnmodifiableMap param, String branch) {
     275                switch( param.Compiler ) {
     276                        case 'gcc-6':
     277                                this.Compiler = new CC_Desc('gcc-6', 'g++-6', 'gcc-6')
     278                        break
     279                        case 'gcc-5':
     280                                this.Compiler = new CC_Desc('gcc-5', 'g++-5', 'gcc-5')
     281                        break
     282                        case 'gcc-4.9':
     283                                this.Compiler = new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9')
     284                        break
     285                        case 'clang':
     286                                this.Compiler = new CC_Desc('clang', 'clang++', 'gcc-6')
     287                        break
     288                        default :
     289                                error "Unhandled compiler : ${cc}"
     290                }
     291
     292                switch( param.Architecture ) {
     293                        case 'x64':
     294                                this.Architecture = new Arch_Desc('x64', '--host=x86_64')
     295                        break
     296                        case 'x86':
     297                                this.Architecture = new Arch_Desc('x86', '--host=i386')
     298                        break
     299                        default :
     300                                error "Unhandled architecture : ${arch}"
     301                }
     302
     303                this.RunAllTests        = param.RunAllTests
     304                this.RunBenchmark       = param.RunBenchmark
     305                this.BuildDocumentation = param.BuildDocumentation
     306                this.Publish            = param.Publish
     307                this.Silent             = param.Silent
     308                this.IsSandbox          = (branch == "jenkins-sandbox")
     309
     310                def full = param.RunAllTests ? " (Full)" : ""
     311                this.DescShort = "${ this.Compiler.cc_name }:${ this.Architecture.name }${full}"
     312
     313                this.DescLong = """Compiler              : ${ this.Compiler.cc_name } (${ this.Compiler.cpp_cc }/${ this.Compiler.cfa_cc })
     314Architecture            : ${ this.Architecture.name }
     315Arc Flags               : ${ this.Architecture.flags }
     316Run All Tests           : ${ this.RunAllTests.toString() }
     317Run Benchmark           : ${ this.RunBenchmark.toString() }
     318Build Documentation     : ${ this.BuildDocumentation.toString() }
     319Publish                 : ${ this.Publish.toString() }
     320Silent                  : ${ this.Silent.toString() }
     321"""
     322
     323                this.GitNewRef = ''
     324                this.GitOldRef = ''
     325        }
     326}
     327
     328def prepare_build() {
     329        // prepare the properties
     330        properties ([                                                                                                   \
     331                [$class: 'ParametersDefinitionProperty',                                                                \
     332                        parameterDefinitions: [                                                                         \
     333                                [$class: 'ChoiceParameterDefinition',                                           \
     334                                        description: 'Which compiler to use',                                   \
     335                                        name: 'Compiler',                                                                       \
     336                                        choices: 'gcc-6\ngcc-5\ngcc-4.9\nclang',                                        \
     337                                        defaultValue: 'gcc-6',                                                          \
     338                                ],                                                                                              \
     339                                [$class: 'ChoiceParameterDefinition',                                           \
     340                                        description: 'The target architecture',                                 \
     341                                        name: 'Architecture',                                                           \
     342                                        choices: 'x64\nx86',                                                            \
     343                                        defaultValue: 'x64',                                                            \
     344                                ],                                                                                              \
     345                                [$class: 'BooleanParameterDefinition',                                                  \
     346                                        description: 'If false, only the quick test suite is ran',              \
     347                                        name: 'RunAllTests',                                                            \
     348                                        defaultValue: false,                                                            \
     349                                ],                                                                                              \
     350                                [$class: 'BooleanParameterDefinition',                                                  \
     351                                        description: 'If true, jenkins also runs benchmarks',           \
     352                                        name: 'RunBenchmark',                                                           \
     353                                        defaultValue: false,                                                            \
     354                                ],                                                                                              \
     355                                [$class: 'BooleanParameterDefinition',                                                  \
     356                                        description: 'If true, jenkins also builds documentation',              \
     357                                        name: 'BuildDocumentation',                                                     \
     358                                        defaultValue: true,                                                             \
     359                                ],                                                                                              \
     360                                [$class: 'BooleanParameterDefinition',                                                  \
     361                                        description: 'If true, jenkins also publishes results',                 \
     362                                        name: 'Publish',                                                                        \
     363                                        defaultValue: false,                                                            \
     364                                ],                                                                                              \
     365                                [$class: 'BooleanParameterDefinition',                                                  \
     366                                        description: 'If true, jenkins will not send emails',           \
     367                                        name: 'Silent',                                                                         \
     368                                        defaultValue: false,                                                            \
     369                                ],                                                                                              \
     370                        ],
     371                ]])
     372
     373        final settings = new BuildSettings(params, env.BRANCH_NAME)
     374
     375        currentBuild.description = settings.DescShort
     376        echo                       settings.DescLong
     377
     378        return settings
     379}
     380
     381def build_stage(String name, Closure block ) {
     382        StageName = name
     383        echo " -------- ${StageName} -------- "
     384        stage(name, block)
     385}
     386
     387def notify_server(int wait) {
     388        sh """curl --silent --show-error --data "wait=${wait}" -X POST https://cforall.uwaterloo.ca:8082/jenkins/notify > /dev/null || true"""
     389        return
     390}
     391
     392def make_doc() {
     393        def err = null
     394        try {
     395                sh 'make clean > /dev/null'
     396                sh 'make > /dev/null 2>&1'
     397        }
     398        catch (Exception caughtError) {
     399                err = caughtError //rethrow error later
     400                sh 'cat *.log'
     401        }
     402        finally {
     403                if (err) throw err // Must re-throw exception to propagate error
     404        }
     405}
  • Makefile.am

    rf9feab8 r90152a4  
    66## file "LICENCE" distributed with Cforall.
    77##
    8 ## Makefile.am -- 
     8## Makefile.am --
    99##
    1010## Author           : Peter A. Buhr
     
    1515###############################################################################
    1616
    17 AUTOMAKE_OPTIONS = foreign              # do not require all the GNU file names
    18 SUBDIRS = src/driver src src/prelude src/libcfa # order important, src before prelude because cfa-cpp used to build prelude
    19 EXTRA_DIST = Docs                       # non-source files
    20 BACKEND_CC = @BACKEND_CC@               # C compiler used to compile Cforall programs, versus C++ compiler used to build cfa command
     17AUTOMAKE_OPTIONS = foreign    # do not require all the GNU file names
     18BACKEND_CC = @BACKEND_CC@     # C compiler used to compile Cforall programs, versus C++ compiler used to build cfa command
    2119
    22 MAINTAINERCLEANFILES = lib/* bin/* src/examples/.deps/* src/tests/.deps/* src/tests/.out/*
     20MAINTAINERCLEANFILES = lib/* bin/* tests/.deps/* tests/.out/*
     21 # order important
     22
     23SUBDIRS = driver src . @LIBCFA_TARGET_DIRS@
     24
     25@LIBCFA_TARGET_MAKEFILES@ : Makefile $(srcdir)/libcfa/configure
     26        @$(eval config_file = $(dir $@)config.data)
     27        @ls $(config_file) || (echo "Missing config.data, re-run configure script again" && false)
     28        @$(eval config_data = $(shell cat $(config_file)))
     29        @echo "Configuring libcfa with '$(config_data)''"
     30        @cd $(dir $@) && $(abs_top_srcdir)/libcfa/configure $(config_data)
     31
     32noinst_DATA = @LIBCFA_TARGET_MAKEFILES@
    2333
    2434man1_MANS = doc/man/cfa.1
     35
     36debug=yes
     37check:
     38        $(MAKE) -C tests all-tests installed=no debug=${debug}
     39
     40installcheck:
     41        $(MAKE) -C tests all-tests installed=yes debug=${debug}
     42
     43status: @LIBCFA_TARGET_MAKEFILES@
     44        @echo -ne "translator\n\t"
     45        @./config.status --config | sed "s/ /\n\t/g; s/\t'/\t/g; s/'\n/\n/g; s/^'//g; s/'$$//g"
     46        @find libcfa -name config.status -printf "\n%h\n\t" -exec {} --config \; | sed "s/ /\n\t/g; s/\t'/\t/g; s/'\n/\n/g; s/^'//g; s/'$$//g"
  • Makefile.in

    rf9feab8 r90152a4  
    1717######################## -*- Mode: Makefile-Automake -*- ######################
    1818###############################################################################
     19
    1920VPATH = @srcdir@
    2021am__is_gnu_make = { \
     
    9394subdir = .
    9495ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    95 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     96am__aclocal_m4_deps = $(top_srcdir)/automake/cfa.m4 \
     97        $(top_srcdir)/configure.ac
    9698am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    9799        $(ACLOCAL_M4)
     
    162164NROFF = nroff
    163165MANS = $(man1_MANS)
     166DATA = $(noinst_DATA)
    164167RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
    165168  distclean-recursive maintainer-clean-recursive
     
    170173AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
    171174        cscope distdir dist dist-all distcheck
    172 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
    173         $(LISP)config.h.in
     175am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
    174176# Read a list of newline-separated strings from the standard input,
    175177# and print each of them once, without duplicates.  Input order is
     
    192194CSCOPE = cscope
    193195DIST_SUBDIRS = $(SUBDIRS)
    194 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
    195         $(top_srcdir)/automake/compile \
     196am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/compile \
    196197        $(top_srcdir)/automake/config.guess \
    197198        $(top_srcdir)/automake/config.sub \
    198199        $(top_srcdir)/automake/install-sh \
    199         $(top_srcdir)/automake/missing INSTALL README automake/compile \
    200         automake/config.guess automake/config.sub automake/depcomp \
    201         automake/install-sh automake/missing automake/ylwrap
     200        $(top_srcdir)/automake/missing $(top_srcdir)/src/config.h.in \
     201        INSTALL README automake/compile automake/config.guess \
     202        automake/config.sub automake/depcomp automake/install-sh \
     203        automake/missing automake/ylwrap
    202204DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
    203205distdir = $(PACKAGE)-$(VERSION)
     
    250252AUTOMAKE = @AUTOMAKE@
    251253AWK = @AWK@
    252 BACKEND_CC = @BACKEND_CC@               # C compiler used to compile Cforall programs, versus C++ compiler used to build cfa command
     254BACKEND_CC = @BACKEND_CC@     # C compiler used to compile Cforall programs, versus C++ compiler used to build cfa command
     255BUILD_IN_TREE_FLAGS = @BUILD_IN_TREE_FLAGS@
    253256CC = @CC@
    254257CCAS = @CCAS@
     
    256259CCASFLAGS = @CCASFLAGS@
    257260CCDEPMODE = @CCDEPMODE@
     261CFACC = @CFACC@
     262CFACPP = @CFACPP@
    258263CFA_BACKEND_CC = @CFA_BACKEND_CC@
    259264CFA_BINDIR = @CFA_BINDIR@
     
    272277DEFS = @DEFS@
    273278DEPDIR = @DEPDIR@
     279DRIVER_DIR = @DRIVER_DIR@
    274280ECHO_C = @ECHO_C@
    275281ECHO_N = @ECHO_N@
     
    278284EXEEXT = @EXEEXT@
    279285GREP = @GREP@
     286HOST_FLAGS = @HOST_FLAGS@
    280287INSTALL = @INSTALL@
    281288INSTALL_DATA = @INSTALL_DATA@
     
    287294LEXLIB = @LEXLIB@
    288295LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
     296LIBCFA_TARGET_DIRS = @LIBCFA_TARGET_DIRS@
     297LIBCFA_TARGET_MAKEFILES = @LIBCFA_TARGET_MAKEFILES@
    289298LIBOBJS = @LIBOBJS@
    290299LIBS = @LIBS@
    291300LTLIBOBJS = @LTLIBOBJS@
    292 MACHINE_TYPE = @MACHINE_TYPE@
    293 MAINT = @MAINT@
    294301MAKEINFO = @MAKEINFO@
    295302MKDIR_P = @MKDIR_P@
     
    307314SHELL = @SHELL@
    308315STRIP = @STRIP@
     316TARGET_HOSTS = @TARGET_HOSTS@
    309317VERSION = @VERSION@
    310318YACC = @YACC@
     
    362370top_builddir = @top_builddir@
    363371top_srcdir = @top_srcdir@
    364 AUTOMAKE_OPTIONS = foreign              # do not require all the GNU file names
    365 SUBDIRS = src/driver src src/prelude src/libcfa # order important, src before prelude because cfa-cpp used to build prelude
    366 EXTRA_DIST = Docs                       # non-source files
    367 MAINTAINERCLEANFILES = lib/* bin/* src/examples/.deps/* src/tests/.deps/* src/tests/.out/*
     372AUTOMAKE_OPTIONS = foreign    # do not require all the GNU file names
     373MAINTAINERCLEANFILES = lib/* bin/* tests/.deps/* tests/.out/*
     374SUBDIRS = driver src . @LIBCFA_TARGET_DIRS@
     375noinst_DATA = @LIBCFA_TARGET_MAKEFILES@
    368376man1_MANS = doc/man/cfa.1
     377debug = yes
    369378all: config.h
    370379        $(MAKE) $(AM_MAKEFLAGS) all-recursive
     
    373382am--refresh: Makefile
    374383        @:
    375 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
     384$(srcdir)/Makefile.in: $(srcdir)/Makefile.am  $(am__configure_deps)
    376385        @for dep in $?; do \
    377386          case '$(am__configure_deps)' in \
     
    399408        $(SHELL) ./config.status --recheck
    400409
    401 $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
     410$(top_srcdir)/configure: $(am__configure_deps)
    402411        $(am__cd) $(srcdir) && $(AUTOCONF)
    403 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
     412$(ACLOCAL_M4): $(am__aclocal_m4_deps)
    404413        $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
    405414$(am__aclocal_m4_deps):
     
    409418        @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
    410419
    411 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
     420stamp-h1: $(top_srcdir)/src/config.h.in $(top_builddir)/config.status
    412421        @rm -f stamp-h1
    413422        cd $(top_builddir) && $(SHELL) ./config.status config.h
    414 $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
     423$(top_srcdir)/src/config.h.in: $(am__configure_deps)
    415424        ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
    416425        rm -f stamp-h1
     
    757766check-am: all-am
    758767check: check-recursive
    759 all-am: Makefile $(MANS) config.h
     768all-am: Makefile $(MANS) $(DATA) config.h
    760769installdirs: installdirs-recursive
    761770installdirs-am:
     
    770779install-am: all-am
    771780        @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
    772 
    773 installcheck: installcheck-recursive
    774781install-strip:
    775782        if test -z '$(STRIP)'; then \
     
    885892.PRECIOUS: Makefile
    886893
     894 # order important
     895
     896@LIBCFA_TARGET_MAKEFILES@ : Makefile $(srcdir)/libcfa/configure
     897        @$(eval config_file = $(dir $@)config.data)
     898        @ls $(config_file) || (echo "Missing config.data, re-run configure script again" && false)
     899        @$(eval config_data = $(shell cat $(config_file)))
     900        @echo "Configuring libcfa with '$(config_data)''"
     901        @cd $(dir $@) && $(abs_top_srcdir)/libcfa/configure $(config_data)
     902check:
     903        $(MAKE) -C tests all-tests installed=no debug=${debug}
     904
     905installcheck:
     906        $(MAKE) -C tests all-tests installed=yes debug=${debug}
     907
     908status: @LIBCFA_TARGET_MAKEFILES@
     909        @echo -ne "translator\n\t"
     910        @./config.status --config | sed "s/ /\n\t/g; s/\t'/\t/g; s/'\n/\n/g; s/^'//g; s/'$$//g"
     911        @find libcfa -name config.status -printf "\n%h\n\t" -exec {} --config \; | sed "s/ /\n\t/g; s/\t'/\t/g; s/'\n/\n/g; s/^'//g; s/'$$//g"
    887912
    888913# Tell versions [3.59,3.63) of GNU make to not export all variables.
  • README

    rf9feab8 r90152a4  
    107107- the implicit coercion of structure types to the type of their first member is
    108108  not implemented
    109        
     109
    110110Who is responsible for cfa-cc?
    111111------------------------------
     
    115115The Cforall project maintains a web page:
    116116
    117         http://plg.uwaterloo.ca/~cforall
     117        https://cforall.uwaterloo.ca
  • aclocal.m4

    rf9feab8 r90152a4  
    127127# Expand $ac_aux_dir to an absolute path.
    128128am_aux_dir=`cd "$ac_aux_dir" && pwd`
    129 ])
    130 
    131 # AM_COND_IF                                            -*- Autoconf -*-
    132 
    133 # Copyright (C) 2008-2014 Free Software Foundation, Inc.
    134 #
    135 # This file is free software; the Free Software Foundation
    136 # gives unlimited permission to copy and/or distribute it,
    137 # with or without modifications, as long as this notice is preserved.
    138 
    139 # _AM_COND_IF
    140 # _AM_COND_ELSE
    141 # _AM_COND_ENDIF
    142 # --------------
    143 # These macros are only used for tracing.
    144 m4_define([_AM_COND_IF])
    145 m4_define([_AM_COND_ELSE])
    146 m4_define([_AM_COND_ENDIF])
    147 
    148 # AM_COND_IF(COND, [IF-TRUE], [IF-FALSE])
    149 # ---------------------------------------
    150 # If the shell condition COND is true, execute IF-TRUE, otherwise execute
    151 # IF-FALSE.  Allow automake to learn about conditional instantiating macros
    152 # (the AC_CONFIG_FOOS).
    153 AC_DEFUN([AM_COND_IF],
    154 [m4_ifndef([_AM_COND_VALUE_$1],
    155            [m4_fatal([$0: no such condition "$1"])])dnl
    156 _AM_COND_IF([$1])dnl
    157 if test -z "$$1_TRUE"; then :
    158   m4_n([$2])[]dnl
    159 m4_ifval([$3],
    160 [_AM_COND_ELSE([$1])dnl
    161 else
    162   $3
    163 ])dnl
    164 _AM_COND_ENDIF([$1])dnl
    165 fi[]dnl
    166129])
    167130
     
    703666AC_SUBST([am__leading_dot])])
    704667
    705 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
    706 # From Jim Meyering
    707 
    708 # Copyright (C) 1996-2014 Free Software Foundation, Inc.
    709 #
    710 # This file is free software; the Free Software Foundation
    711 # gives unlimited permission to copy and/or distribute it,
    712 # with or without modifications, as long as this notice is preserved.
    713 
    714 # AM_MAINTAINER_MODE([DEFAULT-MODE])
    715 # ----------------------------------
    716 # Control maintainer-specific portions of Makefiles.
    717 # Default is to disable them, unless 'enable' is passed literally.
    718 # For symmetry, 'disable' may be passed as well.  Anyway, the user
    719 # can override the default with the --enable/--disable switch.
    720 AC_DEFUN([AM_MAINTAINER_MODE],
    721 [m4_case(m4_default([$1], [disable]),
    722        [enable], [m4_define([am_maintainer_other], [disable])],
    723        [disable], [m4_define([am_maintainer_other], [enable])],
    724        [m4_define([am_maintainer_other], [enable])
    725         m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
    726 AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
    727   dnl maintainer-mode's default is 'disable' unless 'enable' is passed
    728   AC_ARG_ENABLE([maintainer-mode],
    729     [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
    730       am_maintainer_other[ make rules and dependencies not useful
    731       (and sometimes confusing) to the casual installer])],
    732     [USE_MAINTAINER_MODE=$enableval],
    733     [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
    734   AC_MSG_RESULT([$USE_MAINTAINER_MODE])
    735   AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
    736   MAINT=$MAINTAINER_MODE_TRUE
    737   AC_SUBST([MAINT])dnl
    738 ]
    739 )
    740 
    741668# Check to see how 'make' treats includes.                  -*- Autoconf -*-
    742669
  • automake/compile

    • Property mode changed from 100755 to 120000
    rf9feab8 r90152a4  
    1 #! /bin/sh
    2 # Wrapper for compilers which do not understand '-c -o'.
    3 
    4 scriptversion=2012-10-14.11; # UTC
    5 
    6 # Copyright (C) 1999-2014 Free Software Foundation, Inc.
    7 # Written by Tom Tromey <tromey@cygnus.com>.
    8 #
    9 # This program is free software; you can redistribute it and/or modify
    10 # it under the terms of the GNU General Public License as published by
    11 # the Free Software Foundation; either version 2, or (at your option)
    12 # any later version.
    13 #
    14 # This program is distributed in the hope that it will be useful,
    15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
    16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    17 # GNU General Public License for more details.
    18 #
    19 # You should have received a copy of the GNU General Public License
    20 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
    21 
    22 # As a special exception to the GNU General Public License, if you
    23 # distribute this file as part of a program that contains a
    24 # configuration script generated by Autoconf, you may include it under
    25 # the same distribution terms that you use for the rest of that program.
    26 
    27 # This file is maintained in Automake, please report
    28 # bugs to <bug-automake@gnu.org> or send patches to
    29 # <automake-patches@gnu.org>.
    30 
    31 nl='
    32 '
    33 
    34 # We need space, tab and new line, in precisely that order.  Quoting is
    35 # there to prevent tools from complaining about whitespace usage.
    36 IFS=" ""        $nl"
    37 
    38 file_conv=
    39 
    40 # func_file_conv build_file lazy
    41 # Convert a $build file to $host form and store it in $file
    42 # Currently only supports Windows hosts. If the determined conversion
    43 # type is listed in (the comma separated) LAZY, no conversion will
    44 # take place.
    45 func_file_conv ()
    46 {
    47   file=$1
    48   case $file in
    49     / | /[!/]*) # absolute file, and not a UNC file
    50       if test -z "$file_conv"; then
    51         # lazily determine how to convert abs files
    52         case `uname -s` in
    53           MINGW*)
    54             file_conv=mingw
    55             ;;
    56           CYGWIN*)
    57             file_conv=cygwin
    58             ;;
    59           *)
    60             file_conv=wine
    61             ;;
    62         esac
    63       fi
    64       case $file_conv/,$2, in
    65         *,$file_conv,*)
    66           ;;
    67         mingw/*)
    68           file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
    69           ;;
    70         cygwin/*)
    71           file=`cygpath -m "$file" || echo "$file"`
    72           ;;
    73         wine/*)
    74           file=`winepath -w "$file" || echo "$file"`
    75           ;;
    76       esac
    77       ;;
    78   esac
    79 }
    80 
    81 # func_cl_dashL linkdir
    82 # Make cl look for libraries in LINKDIR
    83 func_cl_dashL ()
    84 {
    85   func_file_conv "$1"
    86   if test -z "$lib_path"; then
    87     lib_path=$file
    88   else
    89     lib_path="$lib_path;$file"
    90   fi
    91   linker_opts="$linker_opts -LIBPATH:$file"
    92 }
    93 
    94 # func_cl_dashl library
    95 # Do a library search-path lookup for cl
    96 func_cl_dashl ()
    97 {
    98   lib=$1
    99   found=no
    100   save_IFS=$IFS
    101   IFS=';'
    102   for dir in $lib_path $LIB
    103   do
    104     IFS=$save_IFS
    105     if $shared && test -f "$dir/$lib.dll.lib"; then
    106       found=yes
    107       lib=$dir/$lib.dll.lib
    108       break
    109     fi
    110     if test -f "$dir/$lib.lib"; then
    111       found=yes
    112       lib=$dir/$lib.lib
    113       break
    114     fi
    115     if test -f "$dir/lib$lib.a"; then
    116       found=yes
    117       lib=$dir/lib$lib.a
    118       break
    119     fi
    120   done
    121   IFS=$save_IFS
    122 
    123   if test "$found" != yes; then
    124     lib=$lib.lib
    125   fi
    126 }
    127 
    128 # func_cl_wrapper cl arg...
    129 # Adjust compile command to suit cl
    130 func_cl_wrapper ()
    131 {
    132   # Assume a capable shell
    133   lib_path=
    134   shared=:
    135   linker_opts=
    136   for arg
    137   do
    138     if test -n "$eat"; then
    139       eat=
    140     else
    141       case $1 in
    142         -o)
    143           # configure might choose to run compile as 'compile cc -o foo foo.c'.
    144           eat=1
    145           case $2 in
    146             *.o | *.[oO][bB][jJ])
    147               func_file_conv "$2"
    148               set x "$@" -Fo"$file"
    149               shift
    150               ;;
    151             *)
    152               func_file_conv "$2"
    153               set x "$@" -Fe"$file"
    154               shift
    155               ;;
    156           esac
    157           ;;
    158         -I)
    159           eat=1
    160           func_file_conv "$2" mingw
    161           set x "$@" -I"$file"
    162           shift
    163           ;;
    164         -I*)
    165           func_file_conv "${1#-I}" mingw
    166           set x "$@" -I"$file"
    167           shift
    168           ;;
    169         -l)
    170           eat=1
    171           func_cl_dashl "$2"
    172           set x "$@" "$lib"
    173           shift
    174           ;;
    175         -l*)
    176           func_cl_dashl "${1#-l}"
    177           set x "$@" "$lib"
    178           shift
    179           ;;
    180         -L)
    181           eat=1
    182           func_cl_dashL "$2"
    183           ;;
    184         -L*)
    185           func_cl_dashL "${1#-L}"
    186           ;;
    187         -static)
    188           shared=false
    189           ;;
    190         -Wl,*)
    191           arg=${1#-Wl,}
    192           save_ifs="$IFS"; IFS=','
    193           for flag in $arg; do
    194             IFS="$save_ifs"
    195             linker_opts="$linker_opts $flag"
    196           done
    197           IFS="$save_ifs"
    198           ;;
    199         -Xlinker)
    200           eat=1
    201           linker_opts="$linker_opts $2"
    202           ;;
    203         -*)
    204           set x "$@" "$1"
    205           shift
    206           ;;
    207         *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
    208           func_file_conv "$1"
    209           set x "$@" -Tp"$file"
    210           shift
    211           ;;
    212         *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
    213           func_file_conv "$1" mingw
    214           set x "$@" "$file"
    215           shift
    216           ;;
    217         *)
    218           set x "$@" "$1"
    219           shift
    220           ;;
    221       esac
    222     fi
    223     shift
    224   done
    225   if test -n "$linker_opts"; then
    226     linker_opts="-link$linker_opts"
    227   fi
    228   exec "$@" $linker_opts
    229   exit 1
    230 }
    231 
    232 eat=
    233 
    234 case $1 in
    235   '')
    236      echo "$0: No command.  Try '$0 --help' for more information." 1>&2
    237      exit 1;
    238      ;;
    239   -h | --h*)
    240     cat <<\EOF
    241 Usage: compile [--help] [--version] PROGRAM [ARGS]
    242 
    243 Wrapper for compilers which do not understand '-c -o'.
    244 Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
    245 arguments, and rename the output as expected.
    246 
    247 If you are trying to build a whole package this is not the
    248 right script to run: please start by reading the file 'INSTALL'.
    249 
    250 Report bugs to <bug-automake@gnu.org>.
    251 EOF
    252     exit $?
    253     ;;
    254   -v | --v*)
    255     echo "compile $scriptversion"
    256     exit $?
    257     ;;
    258   cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
    259     func_cl_wrapper "$@"      # Doesn't return...
    260     ;;
    261 esac
    262 
    263 ofile=
    264 cfile=
    265 
    266 for arg
    267 do
    268   if test -n "$eat"; then
    269     eat=
    270   else
    271     case $1 in
    272       -o)
    273         # configure might choose to run compile as 'compile cc -o foo foo.c'.
    274         # So we strip '-o arg' only if arg is an object.
    275         eat=1
    276         case $2 in
    277           *.o | *.obj)
    278             ofile=$2
    279             ;;
    280           *)
    281             set x "$@" -o "$2"
    282             shift
    283             ;;
    284         esac
    285         ;;
    286       *.c)
    287         cfile=$1
    288         set x "$@" "$1"
    289         shift
    290         ;;
    291       *)
    292         set x "$@" "$1"
    293         shift
    294         ;;
    295     esac
    296   fi
    297   shift
    298 done
    299 
    300 if test -z "$ofile" || test -z "$cfile"; then
    301   # If no '-o' option was seen then we might have been invoked from a
    302   # pattern rule where we don't need one.  That is ok -- this is a
    303   # normal compilation that the losing compiler can handle.  If no
    304   # '.c' file was seen then we are probably linking.  That is also
    305   # ok.
    306   exec "$@"
    307 fi
    308 
    309 # Name of file we expect compiler to create.
    310 cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
    311 
    312 # Create the lock directory.
    313 # Note: use '[/\\:.-]' here to ensure that we don't use the same name
    314 # that we are using for the .o file.  Also, base the name on the expected
    315 # object file name, since that is what matters with a parallel build.
    316 lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
    317 while true; do
    318   if mkdir "$lockdir" >/dev/null 2>&1; then
    319     break
    320   fi
    321   sleep 1
    322 done
    323 # FIXME: race condition here if user kills between mkdir and trap.
    324 trap "rmdir '$lockdir'; exit 1" 1 2 15
    325 
    326 # Run the compile.
    327 "$@"
    328 ret=$?
    329 
    330 if test -f "$cofile"; then
    331   test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
    332 elif test -f "${cofile}bj"; then
    333   test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
    334 fi
    335 
    336 rmdir "$lockdir"
    337 exit $ret
    338 
    339 # Local Variables:
    340 # mode: shell-script
    341 # sh-indentation: 2
    342 # eval: (add-hook 'write-file-hooks 'time-stamp)
    343 # time-stamp-start: "scriptversion="
    344 # time-stamp-format: "%:y-%02m-%02d.%02H"
    345 # time-stamp-time-zone: "UTC"
    346 # time-stamp-end: "; # UTC"
    347 # End:
     1/usr/share/automake-1.15/compile
  • automake/config.guess

    • Property mode changed from 100755 to 120000
    rf9feab8 r90152a4  
    1 #! /bin/sh
    2 # Attempt to guess a canonical system name.
    3 #   Copyright 1992-2015 Free Software Foundation, Inc.
    4 
    5 timestamp='2015-08-20'
    6 
    7 # This file is free software; you can redistribute it and/or modify it
    8 # under the terms of the GNU General Public License as published by
    9 # the Free Software Foundation; either version 3 of the License, or
    10 # (at your option) any later version.
    11 #
    12 # This program is distributed in the hope that it will be useful, but
    13 # WITHOUT ANY WARRANTY; without even the implied warranty of
    14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    15 # General Public License for more details.
    16 #
    17 # You should have received a copy of the GNU General Public License
    18 # along with this program; if not, see <http://www.gnu.org/licenses/>.
    19 #
    20 # As a special exception to the GNU General Public License, if you
    21 # distribute this file as part of a program that contains a
    22 # configuration script generated by Autoconf, you may include it under
    23 # the same distribution terms that you use for the rest of that
    24 # program.  This Exception is an additional permission under section 7
    25 # of the GNU General Public License, version 3 ("GPLv3").
    26 #
    27 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
    28 #
    29 # You can get the latest version of this script from:
    30 # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
    31 #
    32 # Please send patches to <config-patches@gnu.org>.
    33 
    34 
    35 me=`echo "$0" | sed -e 's,.*/,,'`
    36 
    37 usage="\
    38 Usage: $0 [OPTION]
    39 
    40 Output the configuration name of the system \`$me' is run on.
    41 
    42 Operation modes:
    43   -h, --help         print this help, then exit
    44   -t, --time-stamp   print date of last modification, then exit
    45   -v, --version      print version number, then exit
    46 
    47 Report bugs and patches to <config-patches@gnu.org>."
    48 
    49 version="\
    50 GNU config.guess ($timestamp)
    51 
    52 Originally written by Per Bothner.
    53 Copyright 1992-2015 Free Software Foundation, Inc.
    54 
    55 This is free software; see the source for copying conditions.  There is NO
    56 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
    57 
    58 help="
    59 Try \`$me --help' for more information."
    60 
    61 # Parse command line
    62 while test $# -gt 0 ; do
    63   case $1 in
    64     --time-stamp | --time* | -t )
    65        echo "$timestamp" ; exit ;;
    66     --version | -v )
    67        echo "$version" ; exit ;;
    68     --help | --h* | -h )
    69        echo "$usage"; exit ;;
    70     -- )     # Stop option processing
    71        shift; break ;;
    72     - ) # Use stdin as input.
    73        break ;;
    74     -* )
    75        echo "$me: invalid option $1$help" >&2
    76        exit 1 ;;
    77     * )
    78        break ;;
    79   esac
    80 done
    81 
    82 if test $# != 0; then
    83   echo "$me: too many arguments$help" >&2
    84   exit 1
    85 fi
    86 
    87 trap 'exit 1' 1 2 15
    88 
    89 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
    90 # compiler to aid in system detection is discouraged as it requires
    91 # temporary files to be created and, as you can see below, it is a
    92 # headache to deal with in a portable fashion.
    93 
    94 # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
    95 # use `HOST_CC' if defined, but it is deprecated.
    96 
    97 # Portable tmp directory creation inspired by the Autoconf team.
    98 
    99 set_cc_for_build='
    100 trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
    101 trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
    102 : ${TMPDIR=/tmp} ;
    103  { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
    104  { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
    105  { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
    106  { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
    107 dummy=$tmp/dummy ;
    108 tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
    109 case $CC_FOR_BUILD,$HOST_CC,$CC in
    110  ,,)    echo "int x;" > $dummy.c ;
    111         for c in cc gcc c89 c99 ; do
    112           if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
    113              CC_FOR_BUILD="$c"; break ;
    114           fi ;
    115         done ;
    116         if test x"$CC_FOR_BUILD" = x ; then
    117           CC_FOR_BUILD=no_compiler_found ;
    118         fi
    119         ;;
    120  ,,*)   CC_FOR_BUILD=$CC ;;
    121  ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
    122 esac ; set_cc_for_build= ;'
    123 
    124 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
    125 # (ghazi@noc.rutgers.edu 1994-08-24)
    126 if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
    127         PATH=$PATH:/.attbin ; export PATH
    128 fi
    129 
    130 UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
    131 UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
    132 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
    133 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
    134 
    135 case "${UNAME_SYSTEM}" in
    136 Linux|GNU|GNU/*)
    137         # If the system lacks a compiler, then just pick glibc.
    138         # We could probably try harder.
    139         LIBC=gnu
    140 
    141         eval $set_cc_for_build
    142         cat <<-EOF > $dummy.c
    143         #include <features.h>
    144         #if defined(__UCLIBC__)
    145         LIBC=uclibc
    146         #elif defined(__dietlibc__)
    147         LIBC=dietlibc
    148         #else
    149         LIBC=gnu
    150         #endif
    151         EOF
    152         eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
    153         ;;
    154 esac
    155 
    156 # Note: order is significant - the case branches are not exclusive.
    157 
    158 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
    159     *:NetBSD:*:*)
    160         # NetBSD (nbsd) targets should (where applicable) match one or
    161         # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
    162         # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
    163         # switched to ELF, *-*-netbsd* would select the old
    164         # object file format.  This provides both forward
    165         # compatibility and a consistent mechanism for selecting the
    166         # object file format.
    167         #
    168         # Note: NetBSD doesn't particularly care about the vendor
    169         # portion of the name.  We always set it to "unknown".
    170         sysctl="sysctl -n hw.machine_arch"
    171         UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
    172             /sbin/$sysctl 2>/dev/null || \
    173             /usr/sbin/$sysctl 2>/dev/null || \
    174             echo unknown)`
    175         case "${UNAME_MACHINE_ARCH}" in
    176             armeb) machine=armeb-unknown ;;
    177             arm*) machine=arm-unknown ;;
    178             sh3el) machine=shl-unknown ;;
    179             sh3eb) machine=sh-unknown ;;
    180             sh5el) machine=sh5le-unknown ;;
    181             earmv*)
    182                 arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
    183                 endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
    184                 machine=${arch}${endian}-unknown
    185                 ;;
    186             *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
    187         esac
    188         # The Operating System including object format, if it has switched
    189         # to ELF recently, or will in the future.
    190         case "${UNAME_MACHINE_ARCH}" in
    191             arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
    192                 eval $set_cc_for_build
    193                 if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
    194                         | grep -q __ELF__
    195                 then
    196                     # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
    197                     # Return netbsd for either.  FIX?
    198                     os=netbsd
    199                 else
    200                     os=netbsdelf
    201                 fi
    202                 ;;
    203             *)
    204                 os=netbsd
    205                 ;;
    206         esac
    207         # Determine ABI tags.
    208         case "${UNAME_MACHINE_ARCH}" in
    209             earm*)
    210                 expr='s/^earmv[0-9]/-eabi/;s/eb$//'
    211                 abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
    212                 ;;
    213         esac
    214         # The OS release
    215         # Debian GNU/NetBSD machines have a different userland, and
    216         # thus, need a distinct triplet. However, they do not need
    217         # kernel version information, so it can be replaced with a
    218         # suitable tag, in the style of linux-gnu.
    219         case "${UNAME_VERSION}" in
    220             Debian*)
    221                 release='-gnu'
    222                 ;;
    223             *)
    224                 release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
    225                 ;;
    226         esac
    227         # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
    228         # contains redundant information, the shorter form:
    229         # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
    230         echo "${machine}-${os}${release}${abi}"
    231         exit ;;
    232     *:Bitrig:*:*)
    233         UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
    234         echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
    235         exit ;;
    236     *:OpenBSD:*:*)
    237         UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
    238         echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
    239         exit ;;
    240     *:ekkoBSD:*:*)
    241         echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
    242         exit ;;
    243     *:SolidBSD:*:*)
    244         echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
    245         exit ;;
    246     macppc:MirBSD:*:*)
    247         echo powerpc-unknown-mirbsd${UNAME_RELEASE}
    248         exit ;;
    249     *:MirBSD:*:*)
    250         echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
    251         exit ;;
    252     *:Sortix:*:*)
    253         echo ${UNAME_MACHINE}-unknown-sortix
    254         exit ;;
    255     alpha:OSF1:*:*)
    256         case $UNAME_RELEASE in
    257         *4.0)
    258                 UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
    259                 ;;
    260         *5.*)
    261                 UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
    262                 ;;
    263         esac
    264         # According to Compaq, /usr/sbin/psrinfo has been available on
    265         # OSF/1 and Tru64 systems produced since 1995.  I hope that
    266         # covers most systems running today.  This code pipes the CPU
    267         # types through head -n 1, so we only detect the type of CPU 0.
    268         ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
    269         case "$ALPHA_CPU_TYPE" in
    270             "EV4 (21064)")
    271                 UNAME_MACHINE="alpha" ;;
    272             "EV4.5 (21064)")
    273                 UNAME_MACHINE="alpha" ;;
    274             "LCA4 (21066/21068)")
    275                 UNAME_MACHINE="alpha" ;;
    276             "EV5 (21164)")
    277                 UNAME_MACHINE="alphaev5" ;;
    278             "EV5.6 (21164A)")
    279                 UNAME_MACHINE="alphaev56" ;;
    280             "EV5.6 (21164PC)")
    281                 UNAME_MACHINE="alphapca56" ;;
    282             "EV5.7 (21164PC)")
    283                 UNAME_MACHINE="alphapca57" ;;
    284             "EV6 (21264)")
    285                 UNAME_MACHINE="alphaev6" ;;
    286             "EV6.7 (21264A)")
    287                 UNAME_MACHINE="alphaev67" ;;
    288             "EV6.8CB (21264C)")
    289                 UNAME_MACHINE="alphaev68" ;;
    290             "EV6.8AL (21264B)")
    291                 UNAME_MACHINE="alphaev68" ;;
    292             "EV6.8CX (21264D)")
    293                 UNAME_MACHINE="alphaev68" ;;
    294             "EV6.9A (21264/EV69A)")
    295                 UNAME_MACHINE="alphaev69" ;;
    296             "EV7 (21364)")
    297                 UNAME_MACHINE="alphaev7" ;;
    298             "EV7.9 (21364A)")
    299                 UNAME_MACHINE="alphaev79" ;;
    300         esac
    301         # A Pn.n version is a patched version.
    302         # A Vn.n version is a released version.
    303         # A Tn.n version is a released field test version.
    304         # A Xn.n version is an unreleased experimental baselevel.
    305         # 1.2 uses "1.2" for uname -r.
    306         echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
    307         # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
    308         exitcode=$?
    309         trap '' 0
    310         exit $exitcode ;;
    311     Alpha\ *:Windows_NT*:*)
    312         # How do we know it's Interix rather than the generic POSIX subsystem?
    313         # Should we change UNAME_MACHINE based on the output of uname instead
    314         # of the specific Alpha model?
    315         echo alpha-pc-interix
    316         exit ;;
    317     21064:Windows_NT:50:3)
    318         echo alpha-dec-winnt3.5
    319         exit ;;
    320     Amiga*:UNIX_System_V:4.0:*)
    321         echo m68k-unknown-sysv4
    322         exit ;;
    323     *:[Aa]miga[Oo][Ss]:*:*)
    324         echo ${UNAME_MACHINE}-unknown-amigaos
    325         exit ;;
    326     *:[Mm]orph[Oo][Ss]:*:*)
    327         echo ${UNAME_MACHINE}-unknown-morphos
    328         exit ;;
    329     *:OS/390:*:*)
    330         echo i370-ibm-openedition
    331         exit ;;
    332     *:z/VM:*:*)
    333         echo s390-ibm-zvmoe
    334         exit ;;
    335     *:OS400:*:*)
    336         echo powerpc-ibm-os400
    337         exit ;;
    338     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
    339         echo arm-acorn-riscix${UNAME_RELEASE}
    340         exit ;;
    341     arm*:riscos:*:*|arm*:RISCOS:*:*)
    342         echo arm-unknown-riscos
    343         exit ;;
    344     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
    345         echo hppa1.1-hitachi-hiuxmpp
    346         exit ;;
    347     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
    348         # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
    349         if test "`(/bin/universe) 2>/dev/null`" = att ; then
    350                 echo pyramid-pyramid-sysv3
    351         else
    352                 echo pyramid-pyramid-bsd
    353         fi
    354         exit ;;
    355     NILE*:*:*:dcosx)
    356         echo pyramid-pyramid-svr4
    357         exit ;;
    358     DRS?6000:unix:4.0:6*)
    359         echo sparc-icl-nx6
    360         exit ;;
    361     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
    362         case `/usr/bin/uname -p` in
    363             sparc) echo sparc-icl-nx7; exit ;;
    364         esac ;;
    365     s390x:SunOS:*:*)
    366         echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
    367         exit ;;
    368     sun4H:SunOS:5.*:*)
    369         echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
    370         exit ;;
    371     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
    372         echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
    373         exit ;;
    374     i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
    375         echo i386-pc-auroraux${UNAME_RELEASE}
    376         exit ;;
    377     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
    378         eval $set_cc_for_build
    379         SUN_ARCH="i386"
    380         # If there is a compiler, see if it is configured for 64-bit objects.
    381         # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
    382         # This test works for both compilers.
    383         if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
    384             if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
    385                 (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
    386                 grep IS_64BIT_ARCH >/dev/null
    387             then
    388                 SUN_ARCH="x86_64"
    389             fi
    390         fi
    391         echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
    392         exit ;;
    393     sun4*:SunOS:6*:*)
    394         # According to config.sub, this is the proper way to canonicalize
    395         # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
    396         # it's likely to be more like Solaris than SunOS4.
    397         echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
    398         exit ;;
    399     sun4*:SunOS:*:*)
    400         case "`/usr/bin/arch -k`" in
    401             Series*|S4*)
    402                 UNAME_RELEASE=`uname -v`
    403                 ;;
    404         esac
    405         # Japanese Language versions have a version number like `4.1.3-JL'.
    406         echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
    407         exit ;;
    408     sun3*:SunOS:*:*)
    409         echo m68k-sun-sunos${UNAME_RELEASE}
    410         exit ;;
    411     sun*:*:4.2BSD:*)
    412         UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
    413         test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
    414         case "`/bin/arch`" in
    415             sun3)
    416                 echo m68k-sun-sunos${UNAME_RELEASE}
    417                 ;;
    418             sun4)
    419                 echo sparc-sun-sunos${UNAME_RELEASE}
    420                 ;;
    421         esac
    422         exit ;;
    423     aushp:SunOS:*:*)
    424         echo sparc-auspex-sunos${UNAME_RELEASE}
    425         exit ;;
    426     # The situation for MiNT is a little confusing.  The machine name
    427     # can be virtually everything (everything which is not
    428     # "atarist" or "atariste" at least should have a processor
    429     # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
    430     # to the lowercase version "mint" (or "freemint").  Finally
    431     # the system name "TOS" denotes a system which is actually not
    432     # MiNT.  But MiNT is downward compatible to TOS, so this should
    433     # be no problem.
    434     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
    435         echo m68k-atari-mint${UNAME_RELEASE}
    436         exit ;;
    437     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
    438         echo m68k-atari-mint${UNAME_RELEASE}
    439         exit ;;
    440     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
    441         echo m68k-atari-mint${UNAME_RELEASE}
    442         exit ;;
    443     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
    444         echo m68k-milan-mint${UNAME_RELEASE}
    445         exit ;;
    446     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
    447         echo m68k-hades-mint${UNAME_RELEASE}
    448         exit ;;
    449     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
    450         echo m68k-unknown-mint${UNAME_RELEASE}
    451         exit ;;
    452     m68k:machten:*:*)
    453         echo m68k-apple-machten${UNAME_RELEASE}
    454         exit ;;
    455     powerpc:machten:*:*)
    456         echo powerpc-apple-machten${UNAME_RELEASE}
    457         exit ;;
    458     RISC*:Mach:*:*)
    459         echo mips-dec-mach_bsd4.3
    460         exit ;;
    461     RISC*:ULTRIX:*:*)
    462         echo mips-dec-ultrix${UNAME_RELEASE}
    463         exit ;;
    464     VAX*:ULTRIX*:*:*)
    465         echo vax-dec-ultrix${UNAME_RELEASE}
    466         exit ;;
    467     2020:CLIX:*:* | 2430:CLIX:*:*)
    468         echo clipper-intergraph-clix${UNAME_RELEASE}
    469         exit ;;
    470     mips:*:*:UMIPS | mips:*:*:RISCos)
    471         eval $set_cc_for_build
    472         sed 's/^        //' << EOF >$dummy.c
    473 #ifdef __cplusplus
    474 #include <stdio.h>  /* for printf() prototype */
    475         int main (int argc, char *argv[]) {
    476 #else
    477         int main (argc, argv) int argc; char *argv[]; {
    478 #endif
    479         #if defined (host_mips) && defined (MIPSEB)
    480         #if defined (SYSTYPE_SYSV)
    481           printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
    482         #endif
    483         #if defined (SYSTYPE_SVR4)
    484           printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
    485         #endif
    486         #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
    487           printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
    488         #endif
    489         #endif
    490           exit (-1);
    491         }
    492 EOF
    493         $CC_FOR_BUILD -o $dummy $dummy.c &&
    494           dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
    495           SYSTEM_NAME=`$dummy $dummyarg` &&
    496             { echo "$SYSTEM_NAME"; exit; }
    497         echo mips-mips-riscos${UNAME_RELEASE}
    498         exit ;;
    499     Motorola:PowerMAX_OS:*:*)
    500         echo powerpc-motorola-powermax
    501         exit ;;
    502     Motorola:*:4.3:PL8-*)
    503         echo powerpc-harris-powermax
    504         exit ;;
    505     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
    506         echo powerpc-harris-powermax
    507         exit ;;
    508     Night_Hawk:Power_UNIX:*:*)
    509         echo powerpc-harris-powerunix
    510         exit ;;
    511     m88k:CX/UX:7*:*)
    512         echo m88k-harris-cxux7
    513         exit ;;
    514     m88k:*:4*:R4*)
    515         echo m88k-motorola-sysv4
    516         exit ;;
    517     m88k:*:3*:R3*)
    518         echo m88k-motorola-sysv3
    519         exit ;;
    520     AViiON:dgux:*:*)
    521         # DG/UX returns AViiON for all architectures
    522         UNAME_PROCESSOR=`/usr/bin/uname -p`
    523         if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
    524         then
    525             if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
    526                [ ${TARGET_BINARY_INTERFACE}x = x ]
    527             then
    528                 echo m88k-dg-dgux${UNAME_RELEASE}
    529             else
    530                 echo m88k-dg-dguxbcs${UNAME_RELEASE}
    531             fi
    532         else
    533             echo i586-dg-dgux${UNAME_RELEASE}
    534         fi
    535         exit ;;
    536     M88*:DolphinOS:*:*) # DolphinOS (SVR3)
    537         echo m88k-dolphin-sysv3
    538         exit ;;
    539     M88*:*:R3*:*)
    540         # Delta 88k system running SVR3
    541         echo m88k-motorola-sysv3
    542         exit ;;
    543     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
    544         echo m88k-tektronix-sysv3
    545         exit ;;
    546     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
    547         echo m68k-tektronix-bsd
    548         exit ;;
    549     *:IRIX*:*:*)
    550         echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
    551         exit ;;
    552     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
    553         echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
    554         exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
    555     i*86:AIX:*:*)
    556         echo i386-ibm-aix
    557         exit ;;
    558     ia64:AIX:*:*)
    559         if [ -x /usr/bin/oslevel ] ; then
    560                 IBM_REV=`/usr/bin/oslevel`
    561         else
    562                 IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
    563         fi
    564         echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
    565         exit ;;
    566     *:AIX:2:3)
    567         if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
    568                 eval $set_cc_for_build
    569                 sed 's/^                //' << EOF >$dummy.c
    570                 #include <sys/systemcfg.h>
    571 
    572                 main()
    573                         {
    574                         if (!__power_pc())
    575                                 exit(1);
    576                         puts("powerpc-ibm-aix3.2.5");
    577                         exit(0);
    578                         }
    579 EOF
    580                 if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
    581                 then
    582                         echo "$SYSTEM_NAME"
    583                 else
    584                         echo rs6000-ibm-aix3.2.5
    585                 fi
    586         elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
    587                 echo rs6000-ibm-aix3.2.4
    588         else
    589                 echo rs6000-ibm-aix3.2
    590         fi
    591         exit ;;
    592     *:AIX:*:[4567])
    593         IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
    594         if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
    595                 IBM_ARCH=rs6000
    596         else
    597                 IBM_ARCH=powerpc
    598         fi
    599         if [ -x /usr/bin/lslpp ] ; then
    600                 IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
    601                            awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
    602         else
    603                 IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
    604         fi
    605         echo ${IBM_ARCH}-ibm-aix${IBM_REV}
    606         exit ;;
    607     *:AIX:*:*)
    608         echo rs6000-ibm-aix
    609         exit ;;
    610     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
    611         echo romp-ibm-bsd4.4
    612         exit ;;
    613     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
    614         echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
    615         exit ;;                             # report: romp-ibm BSD 4.3
    616     *:BOSX:*:*)
    617         echo rs6000-bull-bosx
    618         exit ;;
    619     DPX/2?00:B.O.S.:*:*)
    620         echo m68k-bull-sysv3
    621         exit ;;
    622     9000/[34]??:4.3bsd:1.*:*)
    623         echo m68k-hp-bsd
    624         exit ;;
    625     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
    626         echo m68k-hp-bsd4.4
    627         exit ;;
    628     9000/[34678]??:HP-UX:*:*)
    629         HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
    630         case "${UNAME_MACHINE}" in
    631             9000/31? )            HP_ARCH=m68000 ;;
    632             9000/[34]?? )         HP_ARCH=m68k ;;
    633             9000/[678][0-9][0-9])
    634                 if [ -x /usr/bin/getconf ]; then
    635                     sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
    636                     sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
    637                     case "${sc_cpu_version}" in
    638                       523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
    639                       528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
    640                       532)                      # CPU_PA_RISC2_0
    641                         case "${sc_kernel_bits}" in
    642                           32) HP_ARCH="hppa2.0n" ;;
    643                           64) HP_ARCH="hppa2.0w" ;;
    644                           '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
    645                         esac ;;
    646                     esac
    647                 fi
    648                 if [ "${HP_ARCH}" = "" ]; then
    649                     eval $set_cc_for_build
    650                     sed 's/^            //' << EOF >$dummy.c
    651 
    652                 #define _HPUX_SOURCE
    653                 #include <stdlib.h>
    654                 #include <unistd.h>
    655 
    656                 int main ()
    657                 {
    658                 #if defined(_SC_KERNEL_BITS)
    659                     long bits = sysconf(_SC_KERNEL_BITS);
    660                 #endif
    661                     long cpu  = sysconf (_SC_CPU_VERSION);
    662 
    663                     switch (cpu)
    664                         {
    665                         case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
    666                         case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
    667                         case CPU_PA_RISC2_0:
    668                 #if defined(_SC_KERNEL_BITS)
    669                             switch (bits)
    670                                 {
    671                                 case 64: puts ("hppa2.0w"); break;
    672                                 case 32: puts ("hppa2.0n"); break;
    673                                 default: puts ("hppa2.0"); break;
    674                                 } break;
    675                 #else  /* !defined(_SC_KERNEL_BITS) */
    676                             puts ("hppa2.0"); break;
    677                 #endif
    678                         default: puts ("hppa1.0"); break;
    679                         }
    680                     exit (0);
    681                 }
    682 EOF
    683                     (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
    684                     test -z "$HP_ARCH" && HP_ARCH=hppa
    685                 fi ;;
    686         esac
    687         if [ ${HP_ARCH} = "hppa2.0w" ]
    688         then
    689             eval $set_cc_for_build
    690 
    691             # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
    692             # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
    693             # generating 64-bit code.  GNU and HP use different nomenclature:
    694             #
    695             # $ CC_FOR_BUILD=cc ./config.guess
    696             # => hppa2.0w-hp-hpux11.23
    697             # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
    698             # => hppa64-hp-hpux11.23
    699 
    700             if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
    701                 grep -q __LP64__
    702             then
    703                 HP_ARCH="hppa2.0w"
    704             else
    705                 HP_ARCH="hppa64"
    706             fi
    707         fi
    708         echo ${HP_ARCH}-hp-hpux${HPUX_REV}
    709         exit ;;
    710     ia64:HP-UX:*:*)
    711         HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
    712         echo ia64-hp-hpux${HPUX_REV}
    713         exit ;;
    714     3050*:HI-UX:*:*)
    715         eval $set_cc_for_build
    716         sed 's/^        //' << EOF >$dummy.c
    717         #include <unistd.h>
    718         int
    719         main ()
    720         {
    721           long cpu = sysconf (_SC_CPU_VERSION);
    722           /* The order matters, because CPU_IS_HP_MC68K erroneously returns
    723              true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
    724              results, however.  */
    725           if (CPU_IS_PA_RISC (cpu))
    726             {
    727               switch (cpu)
    728                 {
    729                   case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
    730                   case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
    731                   case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
    732                   default: puts ("hppa-hitachi-hiuxwe2"); break;
    733                 }
    734             }
    735           else if (CPU_IS_HP_MC68K (cpu))
    736             puts ("m68k-hitachi-hiuxwe2");
    737           else puts ("unknown-hitachi-hiuxwe2");
    738           exit (0);
    739         }
    740 EOF
    741         $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
    742                 { echo "$SYSTEM_NAME"; exit; }
    743         echo unknown-hitachi-hiuxwe2
    744         exit ;;
    745     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
    746         echo hppa1.1-hp-bsd
    747         exit ;;
    748     9000/8??:4.3bsd:*:*)
    749         echo hppa1.0-hp-bsd
    750         exit ;;
    751     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
    752         echo hppa1.0-hp-mpeix
    753         exit ;;
    754     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
    755         echo hppa1.1-hp-osf
    756         exit ;;
    757     hp8??:OSF1:*:*)
    758         echo hppa1.0-hp-osf
    759         exit ;;
    760     i*86:OSF1:*:*)
    761         if [ -x /usr/sbin/sysversion ] ; then
    762             echo ${UNAME_MACHINE}-unknown-osf1mk
    763         else
    764             echo ${UNAME_MACHINE}-unknown-osf1
    765         fi
    766         exit ;;
    767     parisc*:Lites*:*:*)
    768         echo hppa1.1-hp-lites
    769         exit ;;
    770     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
    771         echo c1-convex-bsd
    772         exit ;;
    773     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
    774         if getsysinfo -f scalar_acc
    775         then echo c32-convex-bsd
    776         else echo c2-convex-bsd
    777         fi
    778         exit ;;
    779     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
    780         echo c34-convex-bsd
    781         exit ;;
    782     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
    783         echo c38-convex-bsd
    784         exit ;;
    785     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
    786         echo c4-convex-bsd
    787         exit ;;
    788     CRAY*Y-MP:*:*:*)
    789         echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
    790         exit ;;
    791     CRAY*[A-Z]90:*:*:*)
    792         echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
    793         | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
    794               -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
    795               -e 's/\.[^.]*$/.X/'
    796         exit ;;
    797     CRAY*TS:*:*:*)
    798         echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
    799         exit ;;
    800     CRAY*T3E:*:*:*)
    801         echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
    802         exit ;;
    803     CRAY*SV1:*:*:*)
    804         echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
    805         exit ;;
    806     *:UNICOS/mp:*:*)
    807         echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
    808         exit ;;
    809     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
    810         FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
    811         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
    812         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
    813         echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
    814         exit ;;
    815     5000:UNIX_System_V:4.*:*)
    816         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
    817         FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
    818         echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
    819         exit ;;
    820     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
    821         echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
    822         exit ;;
    823     sparc*:BSD/OS:*:*)
    824         echo sparc-unknown-bsdi${UNAME_RELEASE}
    825         exit ;;
    826     *:BSD/OS:*:*)
    827         echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
    828         exit ;;
    829     *:FreeBSD:*:*)
    830         UNAME_PROCESSOR=`/usr/bin/uname -p`
    831         case ${UNAME_PROCESSOR} in
    832             amd64)
    833                 echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
    834             *)
    835                 echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
    836         esac
    837         exit ;;
    838     i*:CYGWIN*:*)
    839         echo ${UNAME_MACHINE}-pc-cygwin
    840         exit ;;
    841     *:MINGW64*:*)
    842         echo ${UNAME_MACHINE}-pc-mingw64
    843         exit ;;
    844     *:MINGW*:*)
    845         echo ${UNAME_MACHINE}-pc-mingw32
    846         exit ;;
    847     *:MSYS*:*)
    848         echo ${UNAME_MACHINE}-pc-msys
    849         exit ;;
    850     i*:windows32*:*)
    851         # uname -m includes "-pc" on this system.
    852         echo ${UNAME_MACHINE}-mingw32
    853         exit ;;
    854     i*:PW*:*)
    855         echo ${UNAME_MACHINE}-pc-pw32
    856         exit ;;
    857     *:Interix*:*)
    858         case ${UNAME_MACHINE} in
    859             x86)
    860                 echo i586-pc-interix${UNAME_RELEASE}
    861                 exit ;;
    862             authenticamd | genuineintel | EM64T)
    863                 echo x86_64-unknown-interix${UNAME_RELEASE}
    864                 exit ;;
    865             IA64)
    866                 echo ia64-unknown-interix${UNAME_RELEASE}
    867                 exit ;;
    868         esac ;;
    869     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
    870         echo i${UNAME_MACHINE}-pc-mks
    871         exit ;;
    872     8664:Windows_NT:*)
    873         echo x86_64-pc-mks
    874         exit ;;
    875     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
    876         # How do we know it's Interix rather than the generic POSIX subsystem?
    877         # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
    878         # UNAME_MACHINE based on the output of uname instead of i386?
    879         echo i586-pc-interix
    880         exit ;;
    881     i*:UWIN*:*)
    882         echo ${UNAME_MACHINE}-pc-uwin
    883         exit ;;
    884     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
    885         echo x86_64-unknown-cygwin
    886         exit ;;
    887     p*:CYGWIN*:*)
    888         echo powerpcle-unknown-cygwin
    889         exit ;;
    890     prep*:SunOS:5.*:*)
    891         echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
    892         exit ;;
    893     *:GNU:*:*)
    894         # the GNU system
    895         echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
    896         exit ;;
    897     *:GNU/*:*:*)
    898         # other systems with GNU libc and userland
    899         echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
    900         exit ;;
    901     i*86:Minix:*:*)
    902         echo ${UNAME_MACHINE}-pc-minix
    903         exit ;;
    904     aarch64:Linux:*:*)
    905         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    906         exit ;;
    907     aarch64_be:Linux:*:*)
    908         UNAME_MACHINE=aarch64_be
    909         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    910         exit ;;
    911     alpha:Linux:*:*)
    912         case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
    913           EV5)   UNAME_MACHINE=alphaev5 ;;
    914           EV56)  UNAME_MACHINE=alphaev56 ;;
    915           PCA56) UNAME_MACHINE=alphapca56 ;;
    916           PCA57) UNAME_MACHINE=alphapca56 ;;
    917           EV6)   UNAME_MACHINE=alphaev6 ;;
    918           EV67)  UNAME_MACHINE=alphaev67 ;;
    919           EV68*) UNAME_MACHINE=alphaev68 ;;
    920         esac
    921         objdump --private-headers /bin/sh | grep -q ld.so.1
    922         if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
    923         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    924         exit ;;
    925     arc:Linux:*:* | arceb:Linux:*:*)
    926         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    927         exit ;;
    928     arm*:Linux:*:*)
    929         eval $set_cc_for_build
    930         if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
    931             | grep -q __ARM_EABI__
    932         then
    933             echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    934         else
    935             if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
    936                 | grep -q __ARM_PCS_VFP
    937             then
    938                 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
    939             else
    940                 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
    941             fi
    942         fi
    943         exit ;;
    944     avr32*:Linux:*:*)
    945         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    946         exit ;;
    947     cris:Linux:*:*)
    948         echo ${UNAME_MACHINE}-axis-linux-${LIBC}
    949         exit ;;
    950     crisv32:Linux:*:*)
    951         echo ${UNAME_MACHINE}-axis-linux-${LIBC}
    952         exit ;;
    953     e2k:Linux:*:*)
    954         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    955         exit ;;
    956     frv:Linux:*:*)
    957         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    958         exit ;;
    959     hexagon:Linux:*:*)
    960         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    961         exit ;;
    962     i*86:Linux:*:*)
    963         echo ${UNAME_MACHINE}-pc-linux-${LIBC}
    964         exit ;;
    965     ia64:Linux:*:*)
    966         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    967         exit ;;
    968     m32r*:Linux:*:*)
    969         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    970         exit ;;
    971     m68*:Linux:*:*)
    972         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    973         exit ;;
    974     mips:Linux:*:* | mips64:Linux:*:*)
    975         eval $set_cc_for_build
    976         sed 's/^        //' << EOF >$dummy.c
    977         #undef CPU
    978         #undef ${UNAME_MACHINE}
    979         #undef ${UNAME_MACHINE}el
    980         #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
    981         CPU=${UNAME_MACHINE}el
    982         #else
    983         #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
    984         CPU=${UNAME_MACHINE}
    985         #else
    986         CPU=
    987         #endif
    988         #endif
    989 EOF
    990         eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
    991         test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
    992         ;;
    993     openrisc*:Linux:*:*)
    994         echo or1k-unknown-linux-${LIBC}
    995         exit ;;
    996     or32:Linux:*:* | or1k*:Linux:*:*)
    997         echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
    998         exit ;;
    999     padre:Linux:*:*)
    1000         echo sparc-unknown-linux-${LIBC}
    1001         exit ;;
    1002     parisc64:Linux:*:* | hppa64:Linux:*:*)
    1003         echo hppa64-unknown-linux-${LIBC}
    1004         exit ;;
    1005     parisc:Linux:*:* | hppa:Linux:*:*)
    1006         # Look for CPU level
    1007         case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
    1008           PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
    1009           PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
    1010           *)    echo hppa-unknown-linux-${LIBC} ;;
    1011         esac
    1012         exit ;;
    1013     ppc64:Linux:*:*)
    1014         echo powerpc64-unknown-linux-${LIBC}
    1015         exit ;;
    1016     ppc:Linux:*:*)
    1017         echo powerpc-unknown-linux-${LIBC}
    1018         exit ;;
    1019     ppc64le:Linux:*:*)
    1020         echo powerpc64le-unknown-linux-${LIBC}
    1021         exit ;;
    1022     ppcle:Linux:*:*)
    1023         echo powerpcle-unknown-linux-${LIBC}
    1024         exit ;;
    1025