#
# Copyright (c) 2011, 2022, 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

# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, modules/java.desktop/Gensrc.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)
