1 #
   2 # Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
   3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 #
   5 # This code is free software; you can redistribute it and/or modify it
   6 # under the terms of the GNU General Public License version 2 only, as
   7 # published by the Free Software Foundation.  Oracle designates this
   8 # particular file as subject to the "Classpath" exception as provided
   9 # by Oracle in the LICENSE file that accompanied this code.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 BUILDDIR = ../..
  27 PACKAGE = sun.awt.X11
  28 LIBRARY = mawt
  29 LIBRARY_OUTPUT = xawt
  30 LIB_LOCATION = $(LIBDIR)/$(LIBARCH)/xawt
  31 PRODUCT = sun
  32 
  33 include $(BUILDDIR)/common/Defs.gmk
  34 
  35 GEN_DIR=$(GENSRCDIR)/sun/awt/X11
  36 
  37 CLASSES_INIT += $(TEMPDIR)/.gen.wrappers $(TEMPDIR)/.gen_icons touch.wrappers
  38 
  39 .PHONY: generated.clean
  40 
  41 #
  42 # Files
  43 #
  44 include FILES_c_unix.gmk
  45 include FILES_export_unix.gmk
  46 AUTO_FILES_JAVA_DIRS = sun/awt/X11
  47 AUTO_JAVA_PRUNE = WrapperGenerator.java
  48 
  49 LDFLAGS += -L$(OPENWIN_LIB)
  50 
  51 # For Xrender extension.
  52 ifeq ($(PLATFORM), solaris)
  53 LDFLAGS += -L/usr/openwin/sfw/lib$(ISA_DIR) -R/usr/openwin/sfw/lib$(ISA_DIR)
  54 endif
  55 
  56 ifeq ($(PLATFORM), linux)
  57 LDFLAGS += -lpthread
  58 dummy := $(shell $(MKDIR) -p $(LIB_LOCATION))
  59 endif
  60 
  61 # Since this library will be living in a subdirectory below the other libraries
  62 #   we need to add an extra runpath so that libraries in the upper directory
  63 #   are found at runtime.
  64 LD_RUNPATH_EXTRAS = ..
  65 
  66 #
  67 # Rules.
  68 #
  69 include $(BUILDDIR)/common/Mapfile-vers.gmk
  70 include $(BUILDDIR)/common/Library.gmk
  71 
  72 #
  73 # Add to the ambient vpath to pick up files in subdirectories
  74 #
  75 vpath %.c   $(SHARE_SRC)/native/sunawt/alphacomposite
  76 vpath %.c   $(PLATFORM_SRC)/native/sun/xawt
  77 vpath %.c   $(PLATFORM_SRC)/native/sun/awt
  78 vpath %.c   $(SHARE_SRC)/native/sun/awt/debug
  79 vpath %.c   $(SHARE_SRC)/native/sun/awt/image
  80 vpath %.c   $(SHARE_SRC)/native/sun/awt/image/gif
  81 vpath %.c   $(SHARE_SRC)/native/sun/awt/image/cvutils
  82 vpath %.c   $(SHARE_SRC)/native/sun/awt/shell
  83 vpath %.c   $(SHARE_SRC)/native/sun/java2d
  84 vpath %.c   $(SHARE_SRC)/native/sun/java2d/loops
  85 vpath %.c   $(SHARE_SRC)/native/sun/java2d/pipe
  86 vpath %.c   $(SHARE_SRC)/native/sun/awt/medialib
  87 vpath %.c   $(SHARE_SRC)/native/sun/awt/utility
  88 vpath %.cpp $(SHARE_SRC)/native/sun/image
  89 vpath %.c   $(SHARE_SRC)/native/sun/font
  90 vpath %.c   $(PLATFORM_SRC)/native/sun/awt/robot_child
  91 vpath %.c   $(SHARE_SRC)/native/sun/java2d/opengl
  92 vpath %.c   $(PLATFORM_SRC)/native/sun/java2d/opengl
  93 vpath %.c   $(PLATFORM_SRC)/native/sun/java2d/x11
  94 
  95 OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 -lXrender -ldl \
  96                    $(LDFLAGS_COMMON) $(AWT_RUNPATH) $(OTHER_LDFLAGS) -lXtst -lXi
  97 
  98 ifeq  ($(PLATFORM), solaris)
  99 CPPFLAGS += -DFUNCPROTO=15
 100 dummy := $(shell $(MKDIR) -p $(LIB_LOCATION))
 101 endif
 102 
 103 CPPFLAGS += -I$(CUPS_HEADERS_PATH)
 104 
 105 CPPFLAGS += -DXAWT -DXAWT_HACK \
 106         -I$(TEMPDIR)/../../sun.awt/awt/CClassHeaders \
 107         -I$(PLATFORM_SRC)/native/sun/awt \
 108         -I$(PLATFORM_SRC)/native/sun/xawt \
 109         -I$(PLATFORM_SRC)/native/sun/jdga \
 110         -I$(SHARE_SRC)/native/sun/awt/debug \
 111         -I$(SHARE_SRC)/native/sun/awt/image/cvutils \
 112         -I$(SHARE_SRC)/native/sun/java2d \
 113         -I$(SHARE_SRC)/native/sun/java2d/loops \
 114         -I$(SHARE_SRC)/native/sun/awt/image/cvutils \
 115         -I$(SHARE_SRC)/native/sun/awt/image \
 116         -I$(SHARE_SRC)/native/sun/font \
 117         -I$(PLATFORM_SRC)/native/sun/java2d \
 118         -I$(SHARE_SRC)/native/sun/java2d/pipe \
 119         -I$(SHARE_SRC)/native/sun/java2d/opengl \
 120         -I$(PLATFORM_SRC)/native/sun/java2d/opengl \
 121         -I$(PLATFORM_SRC)/native/sun/java2d/x11 \
 122         -I$(SHARE_SRC)/native/sun/dc/path \
 123         -I$(SHARE_SRC)/native/sun/dc/doe \
 124         -I$(SHARE_SRC)/native/sun/awt/alphacomposite \
 125         -I$(SHARE_SRC)/native/sun/awt/medialib \
 126         -I$(PLATFORM_SRC)/native/sun/awt/medialib \
 127         -I$(PLATFORM_SRC)/native/sun/font \
 128         -I$(SHARE_SRC)/native/sun/awt \
 129         -I$(PLATFORM_SRC)/native/sun/awt
 130 
 131 ifeq ($(PLATFORM), linux)
 132 # Allows for builds on Debian GNU Linux, X11 is in a different place 
 133   CPPFLAGS += -I/usr/X11R6/include/X11/extensions \
 134               -I/usr/include/X11/extensions \
 135               -I$(OPENWIN_HOME)/include 
 136 endif
 137 
 138 # We have some odd logic here because some Solaris 10 updates
 139 # have a render.h file that suggests gradients are supported, but
 140 # the Xrender.h doesn't have the corresponding type definitions.
 141 # Earlier updates have neither. We'd like to know if there's a mismatch.
 142 # Whilst in the C preprocessor we can tell if the render.h define's are set
 143 # we can't tell anything about C declarations.
 144 # A grep of Xrender.h is the only way to know this. If they are absent
 145 # we will set a flag indicating this mismatch and the JDK source file
 146 # will interpret it to resolve the problem.
 147 ifeq ($(PLATFORM), solaris)
 148   CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions
 149   OS_VERSION := $(shell uname -r)
 150   XRENDER_H := $(OPENWIN_HOME)/share/include/X11/extensions/Xrender.h
 151   ifeq ($(OS_VERSION),5.10) 
 152      LINEARGRADIENT_CNT := $(shell $(EGREP) -c XLinearGradient $(XRENDER_H))
 153      ifeq ($(LINEARGRADIENT_CNT),0) 
 154        CFLAGS+= -DSOLARIS10_NO_XRENDER_STRUCTS
 155      endif
 156  endif
 157 endif
 158 
 159 ifeq ($(MILESTONE), internal)
 160   CPPFLAGS += -DINTERNAL_BUILD
 161 endif
 162 
 163 #
 164 # Generation of wrappers
 165 #
 166 SIZER_DIR=$(GEN_DIR)/generator
 167 SIZER = $(SIZER_DIR)/sizer
 168 SIZER_32_C = $(SIZER).32.c
 169 SIZER_64_C = $(SIZER).64.c
 170 CFLAGS_32=$(CFLAGS)
 171 CFLAGS_64=$(CFLAGS)
 172 
 173 ifeq ($(PLATFORM), solaris)
 174 
 175 isalist:=$(shell $(ISAINFO))
 176 
 177 ifneq (,$(findstring sparcv9, $(isalist)))
 178 # On sparcv9 we generate both 32 and 64-bit sizers in spite of ARCH_DATA_MODEL.
 179 # On sparcv9 CFLAGS already contain $(XARCH_OPTION/64), so to generate 32-bit sizer we need to change this option.
 180 CFLAGS_32=$(subst $(XARCH_OPTION/64),$(XARCH_OPTION/32),$(CFLAGS))
 181 SIZERS = $(SIZER).32 $(SIZER).64
 182 SIZERS_C = $(SIZER_32_C) $(SIZER_64_C)
 183 SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32 $(WRAPPER_GENERATOR_DIR)/sizes.64
 184 CFLAGS_64=$(CFLAGS) $(XARCH_OPTION/64)
 185 else
 186 ifneq (,$(findstring amd64, $(isalist)))
 187 # On amd64 we generate both 32 and 64-bit sizers in spite of ARCH_DATA_MODEL.
 188 # On amd64 CFLAGS already contain $(XARCH_OPTION/64), so to generate 32-bit sizer we need to change this option.
 189 CFLAGS_32=$(subst $(XARCH_OPTION/64),$(XARCH_OPTION/32),$(CFLAGS))
 190 SIZERS = $(SIZER).32 $(SIZER).64
 191 SIZERS_C = $(SIZER_32_C) $(SIZER_64_C)
 192 SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32 $(WRAPPER_GENERATOR_DIR)/sizes.64
 193 CFLAGS_64=$(CFLAGS) $(XARCH_OPTION/64)
 194 else # !sparcv9 : includes (32-bit) sparc, i586
 195 SIZERS = $(SIZER).32
 196 SIZERS_C = $(SIZER_32_C)
 197 SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32
 198 endif # amd64
 199 endif # sparcv9
 200 
 201 else # !solaris
 202 
 203 ifeq ($(ARCH_DATA_MODEL), 32)
 204 SIZERS = $(SIZER).32
 205 SIZERS_C = $(SIZER_32_C)
 206 SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.32
 207 else # !32
 208 SIZERS = $(SIZER).64
 209 SIZERS_C = $(SIZER_64_C)
 210 SIZES = $(WRAPPER_GENERATOR_DIR)/sizes.64
 211 endif # 32
 212 
 213 endif # solaris
 214 
 215 # XXX Hack for 6185483 - use hard-coded sizes.
 216 # Add the 64-bit platforms that need to be included into 32-bit build
 217 # and have sizes.64-$(PLATFORM)-$(LIBARCH) hardcoded in the workspace
 218 ifeq ($(PLATFORM)-$(LIBARCH), solaris-i386)
 219 # If you define DOHACK=true for some combination of $(PLATFORM)-$(LIBARCH),
 220 # make sure you have sizes.64-$(PLATFORM)-$(LIBARCH) pre-generated in
 221 # $(PLATFORM_SRC)/classes/sun/awt/X11/generator/
 222 DOHACK=true
 223 endif # Hack
 224 
 225 ifeq ($(DOHACK), true)
 226 PREDEFINED_SIZES_TMPL=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/sizes.64-$(PLATFORM)-$(LIBARCH)
 227 PREDEFINED_SIZES=$(WRAPPER_GENERATOR_DIR)/sizes.64
 228 SIZES += $(WRAPPER_GENERATOR_DIR)/sizes.64
 229 endif
 230 
 231 ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64)
 232 DOCOMPARE=true
 233 endif
 234 # 64 bit sizers are generated on platform-libarch (left) for use 
 235 # on platform-libarch (right) and stored under the latter name.
 236 # Do compare manually stored and automatically generated pair(s) 
 237 # if DOCOMPARE=true, just after the generation.
 238 STORED_SIZES_TMPL_solaris_amd64=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/sizes.64-solaris-i386
 239 
 240 WRAPPER_GENERATOR_JAVA=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/WrapperGenerator.java
 241 WRAPPER_GENERATOR_DIR=$(GENSRCDIR)/sun/awt/X11/generator
 242 WRAPPER_GENERATOR_TEMPDIR=$(TEMPDIR)/sun/awt/X11/generator
 243 WRAPPER_GENERATOR_CLASS=$(WRAPPER_GENERATOR_TEMPDIR)/WrapperGenerator.class 
 244 XLIBTYPES=$(PLATFORM_SRC)/classes/sun/awt/X11/generator/xlibtypes.txt
 245 
 246 $(SIZERS): $(SIZERS_C) 
 247         $(prep-target)
 248         $(CC) $(CFLAGS_$(subst .,,$(suffix $@))) $(CPPFLAGS) -o $@ $(SIZER)$(suffix $@).c
 249 
 250 $(WRAPPER_GENERATOR_CLASS): $(WRAPPER_GENERATOR_JAVA)
 251         $(prep-target)
 252         $(BOOT_JAVAC_CMD) -d $(WRAPPER_GENERATOR_TEMPDIR) $(WRAPPER_GENERATOR_JAVA)
 253 
 254 $(SIZERS_C): $(WRAPPER_GENERATOR_CLASS) $(XLIBTYPES)
 255         $(prep-target)
 256         $(MKDIR) -p $(WRAPPER_GENERATOR_TEMPDIR)
 257         $(BOOT_JAVA_CMD) -cp $(WRAPPER_GENERATOR_TEMPDIR) WrapperGenerator \
 258             $(SIZER_DIR) $(XLIBTYPES) "sizer" $(subst .,,$(suffix $(basename $@)))
 259 
 260 $(SIZES): $(SIZERS)
 261         @if [ "$(DOHACK)$@" = "true$(PREDEFINED_SIZES)" ]; then \
 262             $(ECHO) COPYING $(PREDEFINED_SIZES_TMPL) into $@; \
 263             $(CP) $(PREDEFINED_SIZES_TMPL) $@; \
 264             $(CHMOD) +w $@;\
 265         else    \
 266             $(ECHO) GENERATING $@; \
 267             $(WRAPPER_GENERATOR_DIR)/sizer$(suffix $@) > $@; \
 268         fi
 269         @if [ "$(DOCOMPARE)$(suffix $@)" = "true.64" ]; then \
 270             $(ECHO) COMPARING $@ and $(STORED_SIZES_TMPL_$(PLATFORM)_$(LIBARCH)); \
 271             $(DIFF) $@ $(STORED_SIZES_TMPL_$(PLATFORM)_$(LIBARCH)); \
 272         fi
 273 
 274 $(TEMPDIR)/.gen.wrappers: $(SIZES) $(WRAPPER_GENERATOR_CLASS) $(XLIBTYPES)
 275         $(BOOT_JAVA_CMD) -cp $(WRAPPER_GENERATOR_TEMPDIR) WrapperGenerator \
 276             $(GEN_DIR) $(XLIBTYPES) "gen" $(WRAPPER_GENERATOR_DIR)/sizes
 277 
 278 touch.wrappers: $(TEMPDIR)/.gen.wrappers
 279         $(MKDIR) -p $(TEMPDIR)
 280         $(TOUCH) $(TEMPDIR)/.gen.wrappers
 281 
 282 generated.clean:
 283         $(RM) -r $(WRAPPER_GENERATOR_TEMPDIR)
 284         $(RM) -r $(WRAPPER_GENERATOR_DIR)
 285         $(RM) -r $(GEN_DIR)/*.java
 286         $(RM) -r $(TEMPDIR)/.gen_icons
 287 
 288 ifdef OPENJDK
 289     ICONS_PATH_PREFIX=$(PLATFORM_SRC)
 290 else
 291     ICONS_PATH_PREFIX=$(CLOSED_SRC)/solaris
 292 endif
 293 
 294 ICONS = \
 295     $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon16.png \
 296     $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon24.png \
 297     $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon32.png \
 298     $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon48.png
 299 
 300 
 301 ICONPATH=$(PLATFORM_SRC)/classes/sun/awt/X11
 302 
 303 ICONS += \
 304    $(ICONPATH)/security-icon-bw16.png \
 305    $(ICONPATH)/security-icon-interim16.png \
 306    $(ICONPATH)/security-icon-yellow16.png \
 307    $(ICONPATH)/security-icon-bw24.png \
 308    $(ICONPATH)/security-icon-interim24.png \
 309    $(ICONPATH)/security-icon-yellow24.png \
 310    $(ICONPATH)/security-icon-bw32.png \
 311    $(ICONPATH)/security-icon-interim32.png \
 312    $(ICONPATH)/security-icon-yellow32.png \
 313    $(ICONPATH)/security-icon-bw48.png \
 314    $(ICONPATH)/security-icon-interim48.png \
 315    $(ICONPATH)/security-icon-yellow48.png
 316 
 317 TEMPDIR_CLASSES = $(TEMPDIR)/classes
 318 
 319 $(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class: ToBin.java
 320         @$(prep-target)
 321         $(BOOT_JAVAC_CMD) -d $(TEMPDIR_CLASSES) $<
 322 
 323 $(TEMPDIR)/.gen_icons: $(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class $(ICONS)
 324         $(prep-target)
 325         for i in $(ICONS); do \
 326             filename=`basename $$i`; \
 327             name=`$(ECHO) $$filename | $(TR) '\-.' '__'`;  \
 328             classname=$(GEN_DIR)/XAWTIcon32_$$name.java; \
 329             $(RM) $$classname; \
 330             $(ECHO) "package sun.awt.X11;" >> $$classname ; \
 331             $(ECHO) "public class XAWTIcon32_$$name {" >> $$classname; \
 332             $(ECHO) "public static int[] $$name = { " >> $$classname;  \
 333             $(CAT) $$i | \
 334               $(BOOT_JAVA_CMD) -cp $(TEMPDIR_CLASSES)  \
 335                 -Djava.awt.headless=true \
 336                 sun.awt.X11.ToBin >> $$classname; \
 337             $(ECHO) "}; }" >> $$classname;  \
 338             classname=$(GEN_DIR)/XAWTIcon64_$$name.java; \
 339             $(RM) $$classname; \
 340             $(ECHO) "package sun.awt.X11;" >> $$classname ; \
 341             $(ECHO) "public class XAWTIcon64_$$name {" >> $$classname; \
 342             $(ECHO) "public static long[] $$name = { " >> $$classname;  \
 343             $(CAT) $$i | \
 344               $(BOOT_JAVA_CMD) -cp $(TEMPDIR_CLASSES)  \
 345                 -Djava.awt.headless=true \
 346                 sun.awt.X11.ToBin >> $$classname; \
 347             $(ECHO) "}; }" >> $$classname;  \
 348         done
 349         $(TOUCH) $@
 350 
 351 clean clobber:: generated.clean
 352 
 353 .PHONY: generated.clean robot_child
 354