1 #
   2 # Copyright (c) 2007, 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 #
  27 # Makefile for building jce.jar and the various cryptographic strength
  28 # policy jar files.
  29 #
  30 
  31 #
  32 # (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds
  33 # respectively.)
  34 #
  35 # JCE builds are very different between OpenJDK and JDK.  The OpenJDK JCE
  36 # jar files do not require signing, but those for JDK do.  If an unsigned
  37 # jar file is installed into JDK, things will break when the crypto
  38 # routines are called.
  39 #
  40 # This Makefile does the "real" build of the JCE files.  There are some
  41 # javac options currently specific to JCE, so we recompile now to make
  42 # sure any implicit compilations didn't use any incorrect flags.
  43 #
  44 # For OpenJDK, the jar files built here are installed directly into the
  45 # OpenJDK.
  46 #
  47 # For JDK, the binaries use pre-built/pre-signed binary files stored in
  48 # the closed workspace that are not shipped in the OpenJDK workspaces.
  49 # We still build the JDK files here to verify the files compile, and in
  50 # preparation for possible signing.  Developers working on JCE in JDK
  51 # must sign the JCE files before testing.  The JCE signing key is kept
  52 # separate from the JDK workspace to prevent its disclosure.
  53 #
  54 # SPECIAL NOTE TO JCE/JDK developers:  The source files must eventually
  55 # be built and signed, and the resulting jar files *MUST BE CHECKED INTO
  56 # THE CLOSED PART OF THE WORKSPACE*.  This separate step *MUST NOT BE
  57 # FORGOTTEN*, otherwise a bug fixed in the source code will not be
  58 # reflected in the shipped binaries.  The "release" target should be
  59 # used to generate the required files.
  60 #
  61 # There are a number of targets to help both JDK/OpenJDK developers.
  62 #
  63 # Main Targets (JDK/OPENJDK):
  64 #
  65 #     all/clobber/clean        The usual.
  66 #                                  If OpenJDK: builds/installs the
  67 #                                      jce.jar/limited policy files.
  68 #                                  If JDK: builds but does not install.
  69 #                                     During full tops-down builds,
  70 #                                     prebuilt/presigned jce.jar &
  71 #                                     limited policy files are copied
  72 #                                     in by make/java/redist/Makefile.
  73 #                                     If you are working in this directory
  74 #                                     and want to install the prebuilts,
  75 #                                     use the "install-prebuilt" target.
  76 #
  77 #     jar                      Builds/installs jce.jar
  78 #                                  If OpenJDK, does not sign
  79 #                                  If JDK, tries to sign
  80 #
  81 # Other lesser-used Targets (JDK/OPENJDK):
  82 #
  83 #     build-jar                Builds jce.jar (does not sign/install)
  84 #
  85 #     build-policy             Builds policy files (does not sign/install)
  86 #
  87 #     install-jar              Alias for "jar" above
  88 #
  89 #     install-limited          Builds/installs limited policy files
  90 #                                  If OpenJDK, does not sign
  91 #                                  If JDK, tries to sign
  92 #     install-unlimited        Builds/nstalls unlimited policy files
  93 #                                  If OpenJDK, does not sign
  94 #                                  If JDK, tries to sign
  95 #
  96 # Other targets (JDK only):
  97 #
  98 #     sign                     Alias for sign-jar and sign-policy
  99 #          sign-jar            Builds/signs jce.jar file (no install)
 100 #          sign-policy         Builds/signs policy files (no install)
 101 #
 102 #     release                  Builds all targets in preparation
 103 #                              for workspace integration.
 104 #
 105 #     install-prebuilt         Installs the pre-built jar files
 106 #
 107 # This makefile was written to support parallel target execution.
 108 #
 109 
 110 BUILDDIR = ../..
 111 PACKAGE = javax.crypto
 112 PRODUCT = sun
 113 
 114 #
 115 # The following is for when we need to do postprocessing
 116 # (signing) against a read-only build.  If the OUTPUTDIR
 117 # isn't writable, the build currently crashes out.
 118 #
 119 ifndef OPENJDK
 120   ifdef ALT_JCE_BUILD_DIR
 121     # =====================================================
 122     # Where to place the output, in case we're building from a read-only
 123     # build area.  (e.g. a release engineering build.)
 124     JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR}
 125     IGNORE_WRITABLE_OUTPUTDIR_TEST=true
 126   else
 127     JCE_BUILD_DIR=${TEMPDIR}
 128   endif
 129 endif
 130 
 131 include $(BUILDDIR)/common/Defs.gmk
 132 
 133 #
 134 # Location for the newly built classfiles.
 135 #
 136 CLASSDESTDIR = $(TEMPDIR)/classes
 137 
 138 #
 139 # Subdirectories of these are automatically included.
 140 #
 141 AUTO_FILES_JAVA_DIRS = \
 142     javax/crypto \
 143     sun/security/internal/interfaces \
 144     sun/security/internal/spec
 145 
 146 include $(BUILDDIR)/common/Classes.gmk
 147 
 148 #
 149 # Rules
 150 #
 151 
 152 #
 153 # Some licensees do not get the security sources, but we still need to
 154 # be able to build "all" for them.  Check here to see if the sources were
 155 # available.  If not, then we don't need to continue this rule.
 156 #
 157 
 158 ifdef OPENJDK
 159 all: build-jar install-jar build-policy install-limited
 160 else  # OPENJDK
 161 ifeq ($(strip $(FILES_java)),)
 162 all:
 163         $(no-source-warning)
 164 else  # FILES_java/policy files available
 165 all: build-jar build-policy
 166         $(build-warning)
 167 endif # $(FILES_java)/policy files available
 168 endif # OPENJDK
 169 
 170 #
 171 # We use a variety of subdirectories in the $(TEMPDIR) depending on what
 172 # part of the build we're doing.  Both OPENJDK/JDK builds are initially
 173 # done in the unsigned area.  When files are signed in JDK, they will be
 174 # placed in the appropriate areas.
 175 #
 176 UNSIGNED_DIR = $(TEMPDIR)/unsigned
 177 
 178 include Defs-jce.gmk
 179 
 180 
 181 # =====================================================
 182 # Build the unsigned jce.jar file.  Signing comes later.
 183 #
 184 
 185 JAR_DESTFILE = $(LIBDIR)/jce.jar
 186 
 187 #
 188 # JCE building is somewhat involved.
 189 #
 190 # OpenJDK:  Since we do not ship prebuilt JCE files, previous compiles
 191 # in the build may have needed JCE class signatures.  There were then
 192 # implicitly built by javac (likely using the boot javac).  While using
 193 # those class files was fine for signatures, we need to rebuild using
 194 # the right compiler.
 195 #
 196 # JDK:  Even through the jce.jar was previously installed, since the
 197 # source files are accessible in the source directories, they will
 198 # always be "newer" than the prebuilt files inside the jar, and thus
 199 # make will always rebuild them.  (We could "hide" the JCE source in a
 200 # separate directory, but that would make the build logic for JDK and
 201 # OpenJDK more complicated.)
 202 #
 203 # Thus in either situation, we shouldn't use these files.
 204 #
 205 # To make sure the classes were built with the right compiler options,
 206 # delete the existing files in $(CLASSBINDIR), rebuild the right way in a
 207 # directory under $(TEMPDIR), then copy the files back to
 208 # $(CLASSBINDIR).   Building in $(TEMPDIR) allows us to use our make
 209 # infrastructure without modification:  .classes.list, macros, etc.
 210 #
 211 
 212 #
 213 # The list of directories that will be remade from scratch, using the
 214 # right compilers/options.
 215 #
 216 DELETE_DIRS = $(patsubst %, $(CLASSBINDIR)/%, $(AUTO_FILES_JAVA_DIRS))
 217 
 218 #
 219 # Since the -C option to jar is used below, each directory entry must be
 220 # preceded with the appropriate directory to "cd" into.
 221 #
 222 JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS))
 223 
 224 build-jar: $(UNSIGNED_DIR)/jce.jar
 225 
 226 #
 227 # Build jce.jar, then replace the previously built JCE files in the
 228 # classes directory with these.  This ensures we have consistently built
 229 # files throughout the workspaces.
 230 #
 231 $(UNSIGNED_DIR)/jce.jar: prebuild build $(JCE_MANIFEST_FILE)
 232         $(prep-target)
 233         $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \
 234             $(BOOT_JAR_JFLAGS)
 235         $(CP) -r $(CLASSDESTDIR)/* $(CLASSBINDIR)
 236         @$(java-vm-cleanup)
 237 
 238 build: prebuild
 239 
 240 prebuild:
 241         $(RM) -r $(DELETE_DIRS)
 242 
 243 
 244 # =====================================================
 245 # Build the unsigned policy files.
 246 #
 247 # Given the current state of world export/import policies,
 248 # these settings work for Sun's situation.  This note is not
 249 # legal guidance, you must still resolve any export/import issues
 250 # applicable for your situation.  Contact your export/import
 251 # counsel for more information.
 252 #
 253 
 254 POLICY_DESTDIR                  = $(LIBDIR)/security
 255 UNSIGNED_POLICY_BUILDDIR        = $(UNSIGNED_DIR)/policy
 256 
 257 build-policy: unlimited limited
 258 
 259 #
 260 # Build the unsigned unlimited policy files.
 261 #
 262 unlimited: \
 263             $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar  \
 264             $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar
 265 
 266 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar:             \
 267             policy/unlimited/default_US_export.policy                   \
 268             policy/unlimited/UNLIMITED
 269         $(prep-target)
 270         $(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@               \
 271             -C policy/unlimited default_US_export.policy                \
 272             $(BOOT_JAR_JFLAGS)
 273         @$(java-vm-cleanup)
 274 
 275 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar:                 \
 276             policy/unlimited/default_local.policy                       \
 277             policy/unlimited/UNLIMITED
 278         $(prep-target)
 279         $(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@               \
 280             -C policy/unlimited default_local.policy                    \
 281             $(BOOT_JAR_JFLAGS)
 282         @$(java-vm-cleanup)
 283 
 284 #
 285 # Build the unsigned limited policy files.
 286 #
 287 # NOTE:  We currently do not place restrictions on our limited export
 288 # policy.  This was not a typo.
 289 #
 290 limited: \
 291             $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar    \
 292             $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar
 293 
 294 $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar:               \
 295             $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar
 296         $(install-file)
 297 
 298 $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar:                   \
 299             policy/limited/default_local.policy                         \
 300             policy/limited/exempt_local.policy                          \
 301             policy/limited/LIMITED
 302         $(prep-target)
 303         $(BOOT_JAR_CMD) cmf policy/limited/LIMITED $@                   \
 304             -C policy/limited default_local.policy                      \
 305             -C policy/limited exempt_local.policy                       \
 306             $(BOOT_JAR_JFLAGS)
 307         @$(java-vm-cleanup)
 308 
 309 UNSIGNED_POLICY_FILES = \
 310     $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar          \
 311     $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar              \
 312     $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar            \
 313     $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar                \
 314 
 315 
 316 ifndef OPENJDK
 317 # =====================================================
 318 # Sign the various jar files.  Not needed for OpenJDK.
 319 #
 320 
 321 SIGNED_DIR              = $(JCE_BUILD_DIR)/signed
 322 SIGNED_POLICY_BUILDDIR  = $(SIGNED_DIR)/policy
 323 
 324 SIGNED_POLICY_FILES = \
 325     $(patsubst $(UNSIGNED_POLICY_BUILDDIR)/%,$(SIGNED_POLICY_BUILDDIR)/%, \
 326         $(UNSIGNED_POLICY_FILES))
 327 
 328 sign: sign-jar sign-policy
 329 
 330 sign-jar: $(SIGNED_DIR)/jce.jar
 331 
 332 sign-policy: $(SIGNED_POLICY_FILES)
 333 
 334 ifndef ALT_JCE_BUILD_DIR
 335 $(SIGNED_DIR)/jce.jar: $(UNSIGNED_DIR)/jce.jar
 336 else
 337 #
 338 # We have to remove the build dependency, otherwise, we'll try to rebuild it
 339 # which we can't do on a read-only filesystem.
 340 #
 341 $(SIGNED_DIR)/jce.jar:
 342         @if [ ! -r $(UNSIGNED_DIR)/jce.jar ] ; then \
 343             $(ECHO) "Couldn't find $(UNSIGNED_DIR)/jce.jar"; \
 344             exit 1; \
 345         fi
 346 endif
 347         $(call sign-file, $(UNSIGNED_DIR)/jce.jar)
 348 
 349 $(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar:       \
 350             $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar
 351         $(call sign-file, $<)
 352 
 353 $(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar:           \
 354             $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar
 355         $(call sign-file, $<)
 356 
 357 $(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar:         \
 358             $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar
 359         $(call sign-file, $<)
 360 
 361 $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar:             \
 362             $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar
 363         $(call sign-file, $<)
 364 
 365 
 366 # =====================================================
 367 # Create the Release Engineering files.  Signed builds,
 368 # unlimited policy file distribution, etc.
 369 #
 370 
 371 CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto
 372 
 373 release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \
 374          $(CLOSED_DIR)/doc/README.txt
 375         $(RM) -r \
 376             $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy              \
 377             $(JCE_BUILD_DIR)/release/jce.jar                         \
 378             $(JCE_BUILD_DIR)/release/US_export_policy.jar            \
 379             $(JCE_BUILD_DIR)/release/local_policy.jar                \
 380             $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy.zip
 381         $(MKDIR) -p $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy
 382         $(CP) $(SIGNED_DIR)/jce.jar $(JCE_BUILD_DIR)/release
 383         $(CP) \
 384             $(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar   \
 385             $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar       \
 386             $(JCE_BUILD_DIR)/release
 387         $(CP) \
 388             $(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \
 389             $(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar     \
 390             $(CLOSED_DIR)/doc/COPYRIGHT.html                         \
 391             $(CLOSED_DIR)/doc/README.txt                             \
 392             $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy
 393         cd $(JCE_BUILD_DIR)/release ; \
 394         $(ZIPEXE) -qr UnlimitedJCEPolicy.zip UnlimitedJCEPolicy
 395         $(release-warning)
 396 
 397 endif # OPENJDK
 398 
 399 
 400 # =====================================================
 401 # Install routines.
 402 #
 403 
 404 #
 405 # Install jce.jar, depending on which type is requested.
 406 #
 407 install-jar jar: $(JAR_DESTFILE)
 408 ifndef OPENJDK
 409         $(release-warning)
 410 endif
 411 
 412 ifdef OPENJDK
 413 $(JAR_DESTFILE): $(UNSIGNED_DIR)/jce.jar
 414 else
 415 $(JAR_DESTFILE): $(SIGNED_DIR)/jce.jar
 416 endif
 417         $(install-file)
 418 
 419 #
 420 # Install the appropriate policy file, depending on the type of build.
 421 #
 422 ifdef OPENJDK
 423 INSTALL_POLICYDIR = $(UNSIGNED_POLICY_BUILDDIR)
 424 else
 425 INSTALL_POLICYDIR = $(SIGNED_POLICY_BUILDDIR)
 426 endif
 427 
 428 install-limited-jars: \
 429             $(INSTALL_POLICYDIR)/limited/US_export_policy.jar   \
 430             $(INSTALL_POLICYDIR)/limited/local_policy.jar
 431         $(MKDIR) -p $(POLICY_DESTDIR)
 432         $(RM) \
 433             $(POLICY_DESTDIR)/US_export_policy.jar              \
 434             $(POLICY_DESTDIR)/local_policy.jar
 435         $(CP) $^ $(POLICY_DESTDIR)
 436 
 437 install-limited: install-limited-jars
 438 ifndef OPENJDK
 439         $(release-warning)
 440 endif
 441 
 442 install-unlimited-jars: \
 443             $(INSTALL_POLICYDIR)/unlimited/US_export_policy.jar \
 444             $(INSTALL_POLICYDIR)/unlimited/local_policy.jar 
 445         $(MKDIR) -p $(POLICY_DESTDIR)
 446         $(RM) \
 447             $(POLICY_DESTDIR)/US_export_policy.jar              \
 448             $(POLICY_DESTDIR)/local_policy.jar
 449         $(CP) $^ $(POLICY_DESTDIR)
 450 
 451 install-unlimited: install-unlimited-jars
 452 ifndef OPENJDK
 453         $(release-warning)
 454 endif
 455 
 456 ifndef OPENJDK
 457 install-prebuilt-jars:
 458         @$(ECHO) "\n>>>Installing prebuilt JCE framework..."
 459         $(RM) $(JAR_DESTFILE) \
 460             $(POLICY_DESTDIR)/US_export_policy.jar \
 461             $(POLICY_DESTDIR)/local_policy.jar
 462         $(CP) $(PREBUILT_DIR)/jce/jce.jar $(JAR_DESTFILE)
 463         $(CP) \
 464             $(PREBUILT_DIR)/jce/US_export_policy.jar \
 465             $(PREBUILT_DIR)/jce/local_policy.jar \
 466             $(POLICY_DESTDIR)
 467 
 468 install-prebuilt: install-prebuilt-jars
 469 endif
 470 
 471 # =====================================================
 472 # Support routines.
 473 #
 474 
 475 clobber clean::
 476         $(RM) -r $(JAR_DESTFILE) $(POLICY_DESTDIR)/US_export_policy.jar \
 477             $(POLICY_DESTDIR)/local_policy.jar $(DELETE_DIRS) $(TEMPDIR) \
 478             $(JCE_BUILD_DIR)
 479 
 480 .PHONY: build-jar jar build-policy unlimited limited install-jar \
 481         install-limited install-unlimited
 482 ifndef OPENJDK
 483 .PHONY: sign sign-jar sign-policy release install-prebuilt
 484 endif