|
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 JAVAC_MAX_WARNINGS = true |
|
132 JAVAC_WARNINGS_FATAL = true |
|
133 include $(BUILDDIR)/common/Defs.gmk |
|
134 |
|
135 # |
|
136 # Location for the newly built classfiles. |
|
137 # |
|
138 CLASSDESTDIR = $(TEMPDIR)/classes |
|
139 |
|
140 # |
|
141 # Subdirectories of these are automatically included. |
|
142 # |
|
143 AUTO_FILES_JAVA_DIRS = \ |
|
144 javax/crypto \ |
|
145 sun/security/internal/interfaces \ |
|
146 sun/security/internal/spec |
|
147 |
|
148 include $(BUILDDIR)/common/Classes.gmk |
|
149 |
|
150 # |
|
151 # Rules |
|
152 # |
|
153 |
|
154 # |
|
155 # Some licensees do not get the security sources, but we still need to |
|
156 # be able to build "all" for them. Check here to see if the sources were |
|
157 # available. If not, then we don't need to continue this rule. |
|
158 # |
|
159 |
|
160 ifdef OPENJDK |
|
161 all: build-jar install-jar build-policy install-limited |
|
162 else # OPENJDK |
|
163 ifeq ($(strip $(FILES_java)),) |
|
164 all: |
|
165 $(no-source-warning) |
|
166 else # FILES_java/policy files available |
|
167 all: build-jar build-policy |
|
168 $(build-warning) |
|
169 endif # $(FILES_java)/policy files available |
|
170 endif # OPENJDK |
|
171 |
|
172 # |
|
173 # We use a variety of subdirectories in the $(TEMPDIR) depending on what |
|
174 # part of the build we're doing. Both OPENJDK/JDK builds are initially |
|
175 # done in the unsigned area. When files are signed in JDK, they will be |
|
176 # placed in the appropriate areas. |
|
177 # |
|
178 UNSIGNED_DIR = $(TEMPDIR)/unsigned |
|
179 |
|
180 include Defs-jce.gmk |
|
181 |
|
182 |
|
183 # ===================================================== |
|
184 # Build the unsigned jce.jar file. Signing comes later. |
|
185 # |
|
186 |
|
187 JAR_DESTFILE = $(LIBDIR)/jce.jar |
|
188 |
|
189 # |
|
190 # JCE building is somewhat involved. |
|
191 # |
|
192 # OpenJDK: Since we do not ship prebuilt JCE files, previous compiles |
|
193 # in the build may have needed JCE class signatures. There were then |
|
194 # implicitly built by javac (likely using the boot javac). While using |
|
195 # those class files was fine for signatures, we need to rebuild using |
|
196 # the right compiler. |
|
197 # |
|
198 # JDK: Even through the jce.jar was previously installed, since the |
|
199 # source files are accessible in the source directories, they will |
|
200 # always be "newer" than the prebuilt files inside the jar, and thus |
|
201 # make will always rebuild them. (We could "hide" the JCE source in a |
|
202 # separate directory, but that would make the build logic for JDK and |
|
203 # OpenJDK more complicated.) |
|
204 # |
|
205 # Thus in either situation, we shouldn't use these files. |
|
206 # |
|
207 # To make sure the classes were built with the right compiler options, |
|
208 # delete the existing files in $(CLASSBINDIR), rebuild the right way in a |
|
209 # directory under $(TEMPDIR), then copy the files back to |
|
210 # $(CLASSBINDIR). Building in $(TEMPDIR) allows us to use our make |
|
211 # infrastructure without modification: .classes.list, macros, etc. |
|
212 # |
|
213 |
|
214 # |
|
215 # The list of directories that will be remade from scratch, using the |
|
216 # right compilers/options. |
|
217 # |
|
218 DELETE_DIRS = $(patsubst %, $(CLASSBINDIR)/%, $(AUTO_FILES_JAVA_DIRS)) |
|
219 |
|
220 # |
|
221 # Since the -C option to jar is used below, each directory entry must be |
|
222 # preceded with the appropriate directory to "cd" into. |
|
223 # |
|
224 JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) |
|
225 |
|
226 build-jar: $(UNSIGNED_DIR)/jce.jar |
|
227 |
|
228 # |
|
229 # Build jce.jar, then replace the previously built JCE files in the |
|
230 # classes directory with these. This ensures we have consistently built |
|
231 # files throughout the workspaces. |
|
232 # |
|
233 $(UNSIGNED_DIR)/jce.jar: prebuild build $(JCE_MANIFEST_FILE) |
|
234 $(prep-target) |
|
235 $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \ |
|
236 $(BOOT_JAR_JFLAGS) |
|
237 $(CP) -r $(CLASSDESTDIR)/* $(CLASSBINDIR) |
|
238 @$(java-vm-cleanup) |
|
239 |
|
240 build: prebuild |
|
241 |
|
242 prebuild: |
|
243 $(RM) -r $(DELETE_DIRS) |
|
244 |
|
245 |
|
246 # ===================================================== |
|
247 # Build the unsigned policy files. |
|
248 # |
|
249 # Given the current state of world export/import policies, |
|
250 # these settings work for Sun's situation. This note is not |
|
251 # legal guidance, you must still resolve any export/import issues |
|
252 # applicable for your situation. Contact your export/import |
|
253 # counsel for more information. |
|
254 # |
|
255 |
|
256 POLICY_DESTDIR = $(LIBDIR)/security |
|
257 UNSIGNED_POLICY_BUILDDIR = $(UNSIGNED_DIR)/policy |
|
258 |
|
259 build-policy: unlimited limited |
|
260 |
|
261 # |
|
262 # Build the unsigned unlimited policy files. |
|
263 # |
|
264 unlimited: \ |
|
265 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ |
|
266 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar |
|
267 |
|
268 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar: \ |
|
269 policy/unlimited/default_US_export.policy \ |
|
270 policy/unlimited/UNLIMITED |
|
271 $(prep-target) |
|
272 $(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@ \ |
|
273 -C policy/unlimited default_US_export.policy \ |
|
274 $(BOOT_JAR_JFLAGS) |
|
275 @$(java-vm-cleanup) |
|
276 |
|
277 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar: \ |
|
278 policy/unlimited/default_local.policy \ |
|
279 policy/unlimited/UNLIMITED |
|
280 $(prep-target) |
|
281 $(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@ \ |
|
282 -C policy/unlimited default_local.policy \ |
|
283 $(BOOT_JAR_JFLAGS) |
|
284 @$(java-vm-cleanup) |
|
285 |
|
286 # |
|
287 # Build the unsigned limited policy files. |
|
288 # |
|
289 # NOTE: We currently do not place restrictions on our limited export |
|
290 # policy. This was not a typo. |
|
291 # |
|
292 limited: \ |
|
293 $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ |
|
294 $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar |
|
295 |
|
296 $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar: \ |
|
297 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar |
|
298 $(install-file) |
|
299 |
|
300 $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \ |
|
301 policy/limited/default_local.policy \ |
|
302 policy/limited/exempt_local.policy \ |
|
303 policy/limited/LIMITED |
|
304 $(prep-target) |
|
305 $(BOOT_JAR_CMD) cmf policy/limited/LIMITED $@ \ |
|
306 -C policy/limited default_local.policy \ |
|
307 -C policy/limited exempt_local.policy \ |
|
308 $(BOOT_JAR_JFLAGS) |
|
309 @$(java-vm-cleanup) |
|
310 |
|
311 UNSIGNED_POLICY_FILES = \ |
|
312 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ |
|
313 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar \ |
|
314 $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ |
|
315 $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \ |
|
316 |
|
317 |
|
318 ifndef OPENJDK |
|
319 # ===================================================== |
|
320 # Sign the various jar files. Not needed for OpenJDK. |
|
321 # |
|
322 |
|
323 SIGNED_DIR = $(JCE_BUILD_DIR)/signed |
|
324 SIGNED_POLICY_BUILDDIR = $(SIGNED_DIR)/policy |
|
325 |
|
326 SIGNED_POLICY_FILES = \ |
|
327 $(patsubst $(UNSIGNED_POLICY_BUILDDIR)/%,$(SIGNED_POLICY_BUILDDIR)/%, \ |
|
328 $(UNSIGNED_POLICY_FILES)) |
|
329 |
|
330 sign: sign-jar sign-policy |
|
331 |
|
332 sign-jar: $(SIGNED_DIR)/jce.jar |
|
333 |
|
334 sign-policy: $(SIGNED_POLICY_FILES) |
|
335 |
|
336 ifndef ALT_JCE_BUILD_DIR |
|
337 $(SIGNED_DIR)/jce.jar: $(UNSIGNED_DIR)/jce.jar |
|
338 else |
|
339 # |
|
340 # We have to remove the build dependency, otherwise, we'll try to rebuild it |
|
341 # which we can't do on a read-only filesystem. |
|
342 # |
|
343 $(SIGNED_DIR)/jce.jar: |
|
344 @if [ ! -r $(UNSIGNED_DIR)/jce.jar ] ; then \ |
|
345 $(ECHO) "Couldn't find $(UNSIGNED_DIR)/jce.jar"; \ |
|
346 exit 1; \ |
|
347 fi |
|
348 endif |
|
349 $(call sign-file, $(UNSIGNED_DIR)/jce.jar) |
|
350 |
|
351 $(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar: \ |
|
352 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar |
|
353 $(call sign-file, $<) |
|
354 |
|
355 $(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar: \ |
|
356 $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar |
|
357 $(call sign-file, $<) |
|
358 |
|
359 $(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar: \ |
|
360 $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar |
|
361 $(call sign-file, $<) |
|
362 |
|
363 $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \ |
|
364 $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar |
|
365 $(call sign-file, $<) |
|
366 |
|
367 |
|
368 # ===================================================== |
|
369 # Create the Release Engineering files. Signed builds, |
|
370 # unlimited policy file distribution, etc. |
|
371 # |
|
372 |
|
373 CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto |
|
374 |
|
375 release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/README.txt |
|
376 $(RM) -r \ |
|
377 $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy \ |
|
378 $(JCE_BUILD_DIR)/release/jce.jar \ |
|
379 $(JCE_BUILD_DIR)/release/US_export_policy.jar \ |
|
380 $(JCE_BUILD_DIR)/release/local_policy.jar \ |
|
381 $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy.zip |
|
382 $(MKDIR) -p $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy |
|
383 $(CP) $(SIGNED_DIR)/jce.jar $(JCE_BUILD_DIR)/release |
|
384 $(CP) \ |
|
385 $(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ |
|
386 $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \ |
|
387 $(JCE_BUILD_DIR)/release |
|
388 $(CP) \ |
|
389 $(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ |
|
390 $(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar \ |
|
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 |