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