/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */

group = 'org.apache.groovy'

project.ext.optionalDeps = []
project.ext.providedDeps = []

project.ext.optional = { project.ext.optionalDeps << it }
project.ext.provided = { project.ext.providedDeps << it }

project.ext.pomConfigureClosureWithoutTweaks = {
    project {
        name 'Apache Groovy'
        description 'Groovy: A powerful multi-faceted language for the JVM'
        url 'https://groovy-lang.org'
        inceptionYear '2003'
        organization {
            name 'Apache Software Foundation'
            url 'https://apache.org'
        }
        developers {
            developer {
                id 'glaforge'
                name 'Guillaume Laforge'
                organization 'SpringSource'
                roles {
                    role 'Despot'
                    role 'Developer'
                }
            }
            developer {
                id 'bob'
                name 'bob mcwhirter'
                email 'bob@werken.com'
                organization 'The Werken Company'
                roles {
                    role 'Founder'
                }
            }
            developer {
                id 'jstrachan'
                name 'James Strachan'
                email 'james@coredevelopers.com'
                organization 'Core Developers Network'
                roles {
                    role 'Founder'
                }
            }
            developer {
                id 'joe'
                name 'Joe Walnes'
                organization 'ThoughtWorks'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'skizz'
                name 'Chris Stevenson'
                organization 'ThoughtWorks'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'jamiemc'
                name 'Jamie McCrindle'
                organization 'Three'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'mattf'
                name 'Matt Foemmel'
                organization 'ThoughtWorks'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'alextkachman'
                name 'Alex Tkachman'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'roshandawrani'
                name 'Roshan Dawrani'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'spullara'
                name 'Sam Pullara'
                email 'sam@sampullara.com'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'kasper'
                name 'Kasper Nielsen'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'travis'
                name 'Travis Kay'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'zohar'
                name 'Zohar Melamed'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'jwilson'
                name 'John Wilson'
                email 'tug@wilson.co.uk'
                organization 'The Wilson Partnership'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'cpoirier'
                name 'Chris Poirier'
                email 'cpoirier@dreaming.org'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'ckl'
                name 'Christiaan ten Klooster'
                email 'ckl@dacelo.nl'
                organization 'Dacelo WebDevelopment'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'goetze'
                name 'Steve Goetze'
                email 'goetze@dovetail.com'
                organization 'Dovetailed Technologies, LLC'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'bran'
                name 'Bing Ran'
                email 'b55r@sina.com'
                organization 'Leadingcare'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'jez'
                name 'Jeremy Rayner'
                email 'jeremy.rayner@gmail.com'
                organization 'javanicus'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'jstump'
                name 'John Stump'
                email 'johnstump2@yahoo.com'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'blackdrag'
                name 'Jochen Theodorou'
                email 'blackdrag@gmx.org'
                roles {
                    role 'Developer'
                    role 'Despot'
                }
            }
            developer {
                id 'russel'
                name 'Russel Winder'
                email 'russel@winder.org.uk'
                organization 'Concertant LLP & It\'z Interactive Ltd'
                roles {
                    role 'Developer'
                    role 'Founder of Gant'
                }
            }
            developer {
                id 'phk'
                name 'Pilho Kim'
                email 'phkim@cluecom.co.kr'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'cstein'
                name 'Christian Stein'
                email 'sormuras@gmx.de'
                organization 'CTSR.de'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'mittie'
                name 'Dierk Koenig'
                email 'dierk.koenig@canoo.com'
                organization 'Canoo Engineering AG'
                roles {
                    role 'Developer'
                }
            }
            developer {
                id 'paulk'
                name 'Paul King'
                email 'paulk@asert.com.au'
                organization 'OCI, Australia'
                roles {
                    role 'Project Manager'
                    role 'Developer'
                    role 'Despot'
                }
            }
            developer {
                id 'galleon'
                name 'Guillaume Alleon'
                email 'guillaume.alleon@gmail.com'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'user57'
                name 'Jason Dillon'
                email 'jason@planet57.com'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'shemnon'
                name 'Danno Ferrin'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'jwill'
                name 'James Williams'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'timyates'
                name 'Tim Yates'
                roles {
                    role 'Developer'
                }
            }
            developer {
                id 'aalmiray'
                name 'Andres Almiray'
                email 'aalmiray@users.sourceforge.net'
                roles {
                    role 'Developer'
                    role 'Despot'
                }
            }
            developer {
                id 'mguillem'
                name 'Marc Guillemot'
                email 'mguillemot@yahoo.fr'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'jimwhite'
                name 'Jim White'
                email 'jim@pagesmiths.com'
                organization 'IFCX.org'
                roles {
                    role 'Developer'
                }
            }
            developer {
                id 'pniederw'
                name 'Peter Niederwieser'
                email 'pniederw@gmail.com'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'andresteingress'
                name 'Andre Steingress'
                roles {
                    role 'Developer'
                }
            }
            developer {
                id 'hamletdrc'
                name 'Hamlet D\'Arcy'
                email 'hamletdrc@gmail.com'
                roles {
                    role 'Developer Emeritus'
                }
            }
            developer {
                id 'melix'
                name 'Cedric Champeau'
                email 'cedric.champeau@gmail.com'
                roles {
                    role 'Developer'
                }
            }
            developer {
                id 'pascalschumacher'
                name 'Pascal Schumacher'
                roles {
                    role 'Developer'
                }
            }
            developer {
                id 'sunlan'
                name 'Daniel Sun'
                email 'realbluesun@hotmail.com'
                roles {
                    role 'Developer'
                    role 'Despot'
                }
            }
            developer {
                id 'rpopma'
                name 'Remko Popma'
                roles {
                    role 'Developer'
                }
            }
            developer {
                id 'grocher'
                name 'Graeme Rocher'
                roles {
                    role 'Developer'
                }
            }
        }
        contributors {
            contributor {
                name 'Joern Eyrich'
            }
            contributor {
                name 'Robert Kuzelj'
            }
            contributor {
                name 'Rod Cope'
            }
            contributor {
                name 'Yuri Schimke'
            }
            contributor {
                name 'James Birchfield'
            }
            contributor {
                name 'Robert Fuller'
            }
            contributor {
                name 'Sergey Udovenko'
            }
            contributor {
                name 'Hallvard Traetteberg'
            }
            contributor {
                name 'Peter Reilly'
            }
            contributor {
                name 'Brian McCallister'
            }
            contributor {
                name 'Richard Monson-Haefel'
            }
            contributor {
                name 'Brian Larson'
            }
            contributor {
                name 'Artur Biesiadowski'
                email 'abies@pg.gda.pl'
            }
            contributor {
                name 'Ivan Z. Ganza'
            }
            contributor {
                name 'Larry Jacobson'
            }
            contributor {
                name 'Jake Gage'
            }
            contributor {
                name 'Arjun Nayyar'
            }
            contributor {
                name 'Masato Nagai'
            }
            contributor {
                name 'Mark Chu-Carroll'
            }
            contributor {
                name 'Mark Turansky'
            }
            contributor {
                name 'Jean-Louis Berliet'
            }
            contributor {
                name 'Graham Miller'
            }
            contributor {
                name 'Marc Palmer'
            }
            contributor {
                name 'Tugdual Grall'
            }
            contributor {
                name 'Edwin Tellman'
            }
            contributor {
                name 'Evan "Hippy" Slatis'
            }
            contributor {
                name 'Mike Dillon'
            }
            contributor {
                name 'Bernhard Huber'
            }
            contributor {
                name 'Yasuharu Nakano'
            }
            contributor {
                name 'Marc DeXeT'
            }
            contributor {
                name 'Dejan Bosanac'
                email 'dejan@nighttale.net'
            }
            contributor {
                name 'Denver Dino'
            }
            contributor {
                name 'Ted Naleid'
            }
            contributor {
                name 'Ted Leung'
            }
            contributor {
                name 'Merrick Schincariol'
            }
            contributor {
                name 'Chanwit Kaewkasi'
            }
            contributor {
                name 'Stefan Matthias Aust'
            }
            contributor {
                name 'Andy Dwelly'
            }
            contributor {
                name 'Philip Milne'
            }
            contributor {
                name 'Tiago Fernandez'
            }
            contributor {
                name 'Steve Button'
            }
            contributor {
                name 'Joachim Baumann'
            }
            contributor {
                name 'Jochen Eddel+'
            }
            contributor {
                name 'Ilinca V. Hallberg'
            }
            contributor {
                name 'Björn Westlin'
            }
            contributor {
                name 'Andrew Glover'
            }
            contributor {
                name 'Brad Long'
            }
            contributor {
                name 'John Bito'
            }
            contributor {
                name 'Jim Jagielski'
            }
            contributor {
                name 'Rodolfo Velasco'
            }
            contributor {
                name 'John Hurst'
            }
            contributor {
                name 'Merlyn Albery-Speyer'
            }
            contributor {
                name 'jeremi Joslin'
            }
            contributor {
                name 'UEHARA Junji'
            }
            contributor {
                name 'NAKANO Yasuharu'
            }
            contributor {
                name 'Dinko Srkoc'
            }
            contributor {
                name 'Raffaele Cigni'
            }
            contributor {
                name 'Alberto Vilches Raton'
            }
            contributor {
                name 'Paulo Poiati'
            }
            contributor {
                name 'Alexander Klein'
            }
            contributor {
                name 'Adam Murdoch'
            }
            contributor {
                name 'David Durham'
            }
            contributor {
                name 'Daniel Henrique Alves Lima'
            }
            contributor {
                name 'John Wagenleitner'
            }
            contributor {
                name 'Colin Harrington'
            }
            contributor {
                name 'Brian Alexander'
            }
            contributor {
                name 'Jan Weitz'
            }
            contributor {
                name 'Chris K Wensel'
            }
            contributor {
                name 'David Sutherland'
            }
            contributor {
                name 'Mattias Reichel'
            }
            contributor {
                name 'David Lee'
            }
            contributor {
                name 'Sergei Egorov'
            }
            contributor {
                name 'Hein Meling'
            }
            contributor {
                name 'Michael Baehr'
            }
            contributor {
                name 'Craig Andrews'
            }
            contributor {
                name 'Peter Ledbrook'
            }
            contributor {
                name 'Scott Stirling'
            }
            contributor {
                name 'Thibault Kruse'
            }
            contributor {
                name 'Tim Tiemens'
            }
            contributor {
                name 'Mike Spille'
            }
            contributor {
                name 'Nikolay Chugunov'
            }
            contributor {
                name 'Francesco Durbin'
            }
            contributor {
                name 'Paolo Di Tommaso'
            }
            contributor {
                name 'Rene Scheibe'
            }
            contributor {
                name 'Matias Bjarland'
            }
            contributor {
                name 'Tomasz Bujok'
            }
            contributor {
                name 'Richard Hightower'
            }
            contributor {
                name 'Andrey Bloschetsov'
            }
            contributor {
                name 'Yu Kobayashi'
            }
            contributor {
                name 'Nick Grealy'
            }
            contributor {
                name 'Vaclav Pech'
            }
            contributor {
                name 'Chuck Tassoni'
            }
            contributor {
                name 'Steven Devijver'
            }
            contributor {
                name 'Ben Manes'
            }
            contributor {
                name 'Troy Heninger'
            }
            contributor {
                name 'Andrew Eisenberg'
            }
            contributor {
                name 'Eric Milles'
            }
            contributor {
                name 'Kohsuke Kawaguchi'
            }
            contributor {
                name 'Scott Vlaminck'
            }
            contributor {
                name 'Hjalmar Ekengren'
            }
            contributor {
                name 'Rafael Luque'
            }
            contributor {
                name 'Joachim Heldmann'
            }
            contributor {
                name 'dgouyette'
            }
            contributor {
                name 'Marcin Grzejszczak'
            }
            contributor {
                name 'Pap Lőrinc'
            }
            contributor {
                name 'Guillaume Balaine'
            }
            contributor {
                name 'Santhosh Kumar T'
            }
            contributor {
                name 'Alan Green'
            }
            contributor {
                name 'Marty Saxton'
            }
            contributor {
                name 'Marcel Overdijk'
            }
            contributor {
                name 'Jonathan Carlson'
            }
            contributor {
                name 'Thomas Heller'
            }
            contributor {
                name 'John Stump'
            }
            contributor {
                name 'Ivan Ganza'
            }
            contributor {
                name 'Alex Popescu'
            }
            contributor {
                name 'Martin Kempf'
            }
            contributor {
                name 'Martin Ghados'
            }
            contributor {
                name 'Martin Stockhammer'
            }
            contributor {
                name 'Martin C. Martin'
            }
            contributor {
                name 'Alexey Verkhovsky'
            }
            contributor {
                name 'Alberto Mijares'
            }
            contributor {
                name 'Matthias Cullmann'
            }
            contributor {
                name 'Tomek Bujok'
            }
            contributor {
                name 'Stephane Landelle'
            }
            contributor {
                name 'Stephane Maldini'
            }
            contributor {
                name 'Mark Volkmann'
            }
            contributor {
                name 'Andrew Taylor'
            }
            contributor {
                name 'Vladimir Vivien'
            }
            contributor {
                name 'Vladimir Orany'
            }
            contributor {
                name 'Joe Wolf'
            }
            contributor {
                name 'Kent Inge Fagerland Simonsen'
            }
            contributor {
                name 'Tom Nichols'
            }
            contributor {
                name 'Ingo Hoffmann'
            }
            contributor {
                name 'Sergii Bondarenko'
            }
            contributor {
                name 'mgroovy'
            }
            contributor {
                name 'Dominik Przybysz'
            }
            contributor {
                name 'Jason Thomas'
            }
            contributor {
                name 'Trygve Amundsens'
            }
            contributor {
                name 'Morgan Hankins'
            }
            contributor {
                name 'Shruti Gupta'
            }
            contributor {
                name 'Ben Yu'
            }
            contributor {
                name 'Dejan Bosanac'
            }
            contributor {
                name 'Lidia Donajczyk-Lipinska'
            }
            contributor {
                name 'Peter Gromov'
            }
            contributor {
                name 'Johannes Link'
            }
            contributor {
                name 'Chris Reeves'
            }
            contributor {
                name 'Sean Timm'
            }
            contributor {
                name 'Dmitry Vyazelenko'
            }
        }
        mailingLists {
            mailingList {
                name 'Groovy Developer List'
                archive 'https://mail-archives.apache.org/mod_mbox/groovy-dev/'
            }
            mailingList {
                name 'Groovy User List'
                archive 'https://mail-archives.apache.org/mod_mbox/groovy-users/'
            }
        }
        licenses {
            license {
                name 'The Apache Software License, Version 2.0'
                url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                distribution 'repo'
            }
        }
        issueManagement {
            system 'jira'
            url 'https://issues.apache.org/jira/browse/GROOVY'
        }
        scm {
            connection 'scm:git:https://github.com/apache/groovy.git'
            developerConnection 'scm:git:https://github.com/apache/groovy.git'
            url 'https://github.com/apache/groovy.git'
        }
    }
}

project.ext.pomConfigureClosure = {
    with pomConfigureClosureWithoutTweaks

    whenConfigured { pom ->
        project.ext.optionalDeps.each { dep ->
            pom.dependencies.find { it.artifactId == dep.name }?.optional = true
        }
        project.ext.providedDeps.each { dep ->
            pom.dependencies.find { it.artifactId == dep.name }?.scope = 'provided'
        }

        // eliminate test-scoped dependencies (no need in maven central poms)
        pom.dependencies.removeAll { dep ->
            dep.scope == 'test'
        }

        if (project == rootProject) {
            // make dependencies optional
            pom.dependencies.each { dep ->  dep.optional = true }
        }

        // add 'packaging' node
        pom.withXml { xmlProvider ->
            def xml = xmlProvider.asString()
            def pomXml = new XmlParser().parse(new ByteArrayInputStream(xml.toString().getBytes("UTF-8")))

            pomXml.version[0] + { packaging('jar') }

            def newXml = new StringWriter()
            def printer = new XmlNodePrinter(new PrintWriter(newXml))
            printer.preserveWhitespace = true
            printer.print(pomXml)
            xml.setLength(0)
            xml.append(newXml.toString())
        }
    }
}
