#
# Copyright (c) 2011, 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 GensrcCommon.gmk

ifeq ($(call isTargetOs, windows), false)
  include gensrc/GensrcIcons.gmk
endif

ifeq ($(call isTargetOs, linux aix), true)
  include gensrc/GensrcX11Wrappers.gmk
endif

include gensrc/GensrcSwing.gmk

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

include GensrcProperties.gmk

PROP_SRC_DIRS := \
    $(TOPDIR)/src/java.desktop/share/classes/sun/awt/resources \
    $(TOPDIR)/src/java.desktop/share/classes/com/sun/accessibility/internal/resources \
    $(TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/motif/resources \
    $(TOPDIR)/src/java.desktop/share/classes/com/sun/swing/internal/plaf/basic/resources \
    $(TOPDIR)/src/java.desktop/share/classes/com/sun/swing/internal/plaf/metal/resources \
    $(TOPDIR)/src/java.desktop/share/classes/com/sun/swing/internal/plaf/synth/resources \
    $(TOPDIR)/src/java.desktop/share/classes/sun/print/resources \
    #

ifeq ($(call isTargetOs, macosx), true)
  PROP_SRC_DIRS += \
      $(TOPDIR)/src/java.desktop/macosx/classes/com/apple/laf/resources \
      $(TOPDIR)/src/java.desktop/macosx/classes/sun/awt/resources \
      #
endif

ifeq ($(call isTargetOs, windows), true)
  PROP_SRC_DIRS += \
      $(TOPDIR)/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/resources \
      $(TOPDIR)/src/java.desktop/windows/classes/sun/awt/windows \
      #
endif

ifeq ($(call isTargetOs, windows macosx), false)
  PROP_SRC_DIRS += $(TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/resources
endif

$(eval $(call SetupCompileProperties, COMPILE_PROPERTIES, \
    SRC_DIRS := $(PROP_SRC_DIRS), \
    EXCLUDE := %cursors.properties, \
    CLASS := ListResourceBundle, \
))

TARGETS += $(COMPILE_PROPERTIES)

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