require 'package' class Openjdk21 < Package description 'The JDK is a development environment for building applications, applets, and components using the Java programming language.' homepage 'https://openjdk.org/' version '21.0.9' license 'GPL-2' compatibility 'x86_64' # Visit https://www.azul.com/downloads/?version=java-21-lts&package=jdk#zulu to download the binary. source_url 'https://cdn.azul.com/zulu/bin/zulu21.46.19-ca-jdk21.0.9-linux_x64.tar.gz' source_sha256 '67e810b31427ac0ff1c249473595066a00bdf0f9265df186c32905d5f75c93b8' no_compile_needed no_shrink print_source_bashrc def self.preflight jdkver = `java -version 2>&1`[/version "(.*?)"/, 1].to_s unless jdkver.empty? || jdkver.include?('No such file or directory') || jdkver.include?('not found') jdkname = `java -version 2>&1`[/(.*?)\s/, 1].to_s jdkname = 'jdk' if jdkname == 'java' majver = jdkver[/(\d+)\./, 1].to_s majver = '8' if majver == '1' unless jdkname == 'openjdk' && majver == '17' puts "Package #{jdkname}#{majver} already installed.".lightgreen abort "Enter `crew remove #{jdkname}#{majver} && crew install openjdk21` to install this version." end end end def self.install FileUtils.mkdir_p CREW_DEST_MAN_PREFIX FileUtils.mkdir_p "#{CREW_DEST_PREFIX}/share/openjdk21" FileUtils.mv Dir['*'], "#{CREW_DEST_PREFIX}/share/openjdk21/" FileUtils.mkdir_p "#{CREW_DEST_PREFIX}/bin" Dir["#{CREW_DEST_PREFIX}/share/openjdk21/bin/*"].each do |binfile| @basename = File.basename(binfile) FileUtils.ln_s "#{CREW_PREFIX}/share/openjdk21/bin/#{@basename}", "#{CREW_DEST_PREFIX}/bin/#{@basename}" end FileUtils.mv Dir["#{CREW_DEST_PREFIX}/share/openjdk21/man/*"], CREW_DEST_MAN_PREFIX # Add environment variable. FileUtils.mkdir_p "#{CREW_DEST_PREFIX}/etc/env.d/" javaenv = <<~EOF # Java configuration JAVA_HOME=#{CREW_PREFIX} EOF File.write("#{CREW_DEST_PREFIX}/etc/env.d/10-openjdk21", javaenv) end end