#!/usr/bin/env ruby
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
#

xcodeAction = ARGV[0]

exit unless xcodeAction == "install"

JOBJC_JAR = ARGV[1]
LIBPATH = ARGV[2]
OBJROOT = ARGV[3]
ARCHS   = ARGV[4]
STABLE_GEN_DIR = ARGV[5]

ourJavaHome = ENV['JAVA_HOME']
ourJavaVersion = `java -fullversion 2>&1`
$stderr.puts "ENV['JAVA_HOME'] = #{ourJavaHome}"
$stderr.puts "java -fullversion = #{ourJavaVersion}"

$stderr.puts "jobjc_jar = #{JOBJC_JAR}"
$stderr.puts "libpath = #{LIBPATH}"
$stderr.puts "objroot = #{OBJROOT}"
$stderr.puts "ARCHS   = #{ARCHS}"
$stderr.puts "STABLE_GEN_DIR = #{STABLE_GEN_DIR}"

jarch = if ARCHS =~ /x86_64/ then "-d64" else "-d32" end

# compute the boot class path, but remove the JObjC jar file that may have been installed in the boot jdk

bootclasspathcmd = "java -classpath #{OBJROOT}/bin/core:#{OBJROOT}/bin/generator com.apple.internal.jobjc.generator.BootClassPathMinus #{JOBJC_JAR}"
$stderr.puts bootclasspathcmd
bootclasspath = `#{bootclasspathcmd}`

$stderr.puts "bootclasspath is: "
$stderr.puts bootclasspath

# we run the generator with our newly created JObjC.  The installed version (if available) has been removed from
# the boot class path, so we are building with everything newly created.
cmd = "java #{jarch} -Xms128m -Xmx512m -Djava.library.path=#{LIBPATH} -Xbootclasspath:#{bootclasspath.chomp} -classpath #{OBJROOT}/bin/core:#{OBJROOT}/bin/generator -ea com.apple.internal.jobjc.generator.Generator dst=#{OBJROOT}/src/jobjc frameworks=#{STABLE_GEN_DIR}"

$stderr.puts cmd
puts `#{cmd} 2>&1`

raise $?.to_i if $?.to_i != 0
