/*
 * 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.
 */

def resources = scriptResources(buildscript)

configure(rootProject) {
  ext {
    // also change this in extractor tool: ExtractForeignAPI
    vectorIncubatorJavaVersions = [ JavaVersion.VERSION_20, JavaVersion.VERSION_21, JavaVersion.VERSION_22 ] as Set
  }
}

configure(project(":lucene:core")) {
  ext {
    apijars = layout.projectDirectory.dir("src/generated/jdk")
    mrjarJavaVersions = [ 19, 20, 21 ]
  }
  
  configurations {
    apiextractor
  }

  dependencies {
    apiextractor "org.ow2.asm:asm:${scriptDepVersions['asm']}"
  }

  mrjarJavaVersions.each { jdkVersion ->
    def task = tasks.create(name: "generateJdkApiJar${jdkVersion}", type: JavaExec) {
      description "Regenerate the API-only JAR file with public Panama Foreign & Vector API from JDK ${jdkVersion}"
      group "generation"
      
      javaLauncher = javaToolchains.launcherFor {
        languageVersion = JavaLanguageVersion.of(jdkVersion)
      }
      
      onlyIf {
        try {
          javaLauncher.get()
          return true
        } catch (Exception e) {
          logger.warn('Launcher for Java {} is not available; skipping regeneration of Panama Foreign & Vector API JAR.', jdkVersion)
          logger.warn('Error: {}', e.cause?.message)
          logger.warn("Please make sure to point env 'JAVA{}_HOME' to exactly JDK version {} or enable Gradle toolchain auto-download.", jdkVersion, jdkVersion)
          return false
        }
      }

      classpath = configurations.apiextractor
      mainClass = file("${resources}/ExtractJdkApis.java") as String
      systemProperties = [
        'user.timezone': 'UTC',
        'file.encoding': 'UTF-8',
      ]
      args = [
        jdkVersion,
        apijars.file("jdk${jdkVersion}.apijar"),
      ]
    }

    regenerate.dependsOn task
  }
}