#
# Copyright 2006-2007 Sun Microsystems, Inc.  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.  Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#

BUILDDIR = ../..
PRODUCT  = sun
include $(BUILDDIR)/common/Defs.gmk

ifdef OPENJDK
    SUBDIRS += lcms
    ICCPROFILE_SRC_DIR = $(SHARE_SRC)/lib/cmm/lcms
else # !OPENJDK
    SUBDIRS += kcms
    ICCPROFILE_SRC_DIR = $(CLOSED_SRC)/share/lib/cmm/kcms
endif # OPENJDK

#
# ICC Profiles used by the CMM.
#
ICCPROFILE_DEST_DIR = $(LIBDIR)/cmm

iccprofiles: $(ICCPROFILE_DEST_DIR)/sRGB.pf $(ICCPROFILE_DEST_DIR)/GRAY.pf \
	     $(ICCPROFILE_DEST_DIR)/CIEXYZ.pf

ifndef OPENJDK
iccprofiles:  $(ICCPROFILE_DEST_DIR)/PYCC.pf \
	      $(ICCPROFILE_DEST_DIR)/LINEAR_RGB.pf
endif

$(ICCPROFILE_DEST_DIR)/sRGB.pf: $(ICCPROFILE_SRC_DIR)/sRGB.pf
	$(RM) $(ICCPROFILE_DEST_DIR)/sRGB.pf
	-$(MKDIR) -p $(ICCPROFILE_DEST_DIR)
	$(CP) $(ICCPROFILE_SRC_DIR)/sRGB.pf $(ICCPROFILE_DEST_DIR)
	$(CHMOD) 444 $(ICCPROFILE_DEST_DIR)/sRGB.pf

$(ICCPROFILE_DEST_DIR)/GRAY.pf: $(ICCPROFILE_SRC_DIR)/GRAY.pf
	$(RM) $(ICCPROFILE_DEST_DIR)/GRAY.pf
	-$(MKDIR) -p $(ICCPROFILE_DEST_DIR)
	$(CP) $(ICCPROFILE_SRC_DIR)/GRAY.pf $(ICCPROFILE_DEST_DIR)
	$(CHMOD) 444 $(ICCPROFILE_DEST_DIR)/GRAY.pf

$(ICCPROFILE_DEST_DIR)/CIEXYZ.pf: $(ICCPROFILE_SRC_DIR)/CIEXYZ.pf
	$(RM) $(ICCPROFILE_DEST_DIR)/CIEXYZ.pf
	-$(MKDIR) -p $(ICCPROFILE_DEST_DIR)
	$(CP) $(ICCPROFILE_SRC_DIR)/CIEXYZ.pf $(ICCPROFILE_DEST_DIR)
	$(CHMOD) 444 $(ICCPROFILE_DEST_DIR)/CIEXYZ.pf

$(ICCPROFILE_DEST_DIR)/PYCC.pf: $(ICCPROFILE_SRC_DIR)/PYCC.pf
	$(RM) $(ICCPROFILE_DEST_DIR)/PYCC.pf
	-$(MKDIR) -p $(ICCPROFILE_DEST_DIR)
	$(CP) $(ICCPROFILE_SRC_DIR)/PYCC.pf $(ICCPROFILE_DEST_DIR)
	$(CHMOD) 444 $(ICCPROFILE_DEST_DIR)/PYCC.pf

$(ICCPROFILE_DEST_DIR)/LINEAR_RGB.pf: $(ICCPROFILE_SRC_DIR)/LINEAR_RGB.pf
	$(RM) $(ICCPROFILE_DEST_DIR)/LINEAR_RGB.pf
	-$(MKDIR) -p $(ICCPROFILE_DEST_DIR)
	$(CP) $(ICCPROFILE_SRC_DIR)/LINEAR_RGB.pf $(ICCPROFILE_DEST_DIR)
	$(CHMOD) 444 $(ICCPROFILE_DEST_DIR)/LINEAR_RGB.pf

iccprofiles.clean:
	$(RM) -r $(ICCPROFILE_DEST_DIR)


clobber: iccprofiles.clean
	$(SUBDIRS-loop)

clean: iccprofiles.clean
	$(SUBDIRS-loop)

all build:: iccprofiles
	$(SUBDIRS-loop)

openjdk::
	$(MAKE) OPENJDK=true build

.PHONY: iccprofiles iccprofiles.clean copy-files openjdk
