#
# Copyright (c) 2015, 2025, 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.
#

include MakeFileStart.gmk

################################################################################
# This file builds the Java components of testlib.
# It also covers the test-image part, where the built files are copied to the
# test image.
################################################################################

include CopyFiles.gmk
include JavaCompilation.gmk

################################################################################
# Targets for building the test lib jars
################################################################################

TEST_LIB_SOURCE_DIR := $(TOPDIR)/test/lib
TEST_LIB_SUPPORT := $(SUPPORT_OUTPUTDIR)/test/lib

$(eval $(call SetupJavaCompilation, BUILD_WB_JAR, \
    TARGET_RELEASE := $(TARGET_RELEASE_NEWJDK_UPGRADED), \
    SRC := $(TEST_LIB_SOURCE_DIR)/jdk/test/whitebox/, \
    BIN := $(TEST_LIB_SUPPORT)/wb_classes, \
    JAR := $(TEST_LIB_SUPPORT)/wb.jar, \
    DISABLED_WARNINGS := deprecation removal preview, \
    JAVAC_FLAGS := --enable-preview, \
))

TARGETS += $(BUILD_WB_JAR)

ifeq ($(call isTargetOs, linux), false)
    BUILD_TEST_LIB_JAR_EXCLUDES := jdk/test/lib/containers
endif

$(eval $(call SetupJavaCompilation, BUILD_TEST_LIB_JAR, \
    TARGET_RELEASE := $(TARGET_RELEASE_NEWJDK_UPGRADED), \
    SRC := $(TEST_LIB_SOURCE_DIR), \
    EXCLUDES := $(BUILD_TEST_LIB_JAR_EXCLUDES), \
    BIN := $(TEST_LIB_SUPPORT)/test-lib_classes, \
    HEADERS := $(TEST_LIB_SUPPORT)/test-lib_headers, \
    JAR := $(TEST_LIB_SUPPORT)/test-lib.jar, \
    JAVAC_FLAGS := --add-exports java.base/sun.security.util=ALL-UNNAMED \
        --add-exports java.base/jdk.internal.classfile=ALL-UNNAMED \
        --add-exports java.base/jdk.internal.classfile.attribute=ALL-UNNAMED \
        --add-exports java.base/jdk.internal.classfile.constantpool=ALL-UNNAMED \
        --add-exports java.base/jdk.internal.module=ALL-UNNAMED \
        --add-exports java.base/jdk.internal.platform=ALL-UNNAMED \
        --add-exports java.base/sun.security.pkcs=ALL-UNNAMED \
        --add-exports java.base/sun.security.provider.certpath=ALL-UNNAMED \
        --add-exports java.base/sun.security.tools.keytool=ALL-UNNAMED \
        --add-exports java.base/sun.security.x509=ALL-UNNAMED \
        --enable-preview, \
))

TARGETS += $(BUILD_TEST_LIB_JAR)

build-test-lib: $(TARGETS)

################################################################################
# Targets for building test-image.
################################################################################

# Copy the jars to the test image.
$(eval $(call SetupCopyFiles, COPY_LIBTEST_JARS, \
    DEST := $(TEST_IMAGE_DIR)/lib-test, \
    FILES := $(BUILD_WB_JAR_JAR) $(BUILD_TEST_LIB_JAR_JAR), \
))

test-image-lib: $(COPY_LIBTEST_JARS)

all: build-test-lib

.PHONY: build-test-lib test-image-lib

################################################################################

include MakeFileEnd.gmk
