jdk/makefiles/sun/security/mscapi/Makefile
changeset 12892 3ef14bab6254
parent 12891 5dbaa8f0f72e
child 12893 483a74a0b295
equal deleted inserted replaced
12891:5dbaa8f0f72e 12892:3ef14bab6254
     1 #
       
     2 # Copyright (c) 2005, 2012, 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 sunmscapi.jar and native libraries.
       
    28 #
       
    29 # This file was derived from make/com/sun/crypto/provider/Makefile.
       
    30 #
       
    31 
       
    32 #
       
    33 # (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds
       
    34 # respectively.)
       
    35 #
       
    36 # JCE builds are very different between OpenJDK and JDK.  The OpenJDK JCE
       
    37 # jar files do not require signing, but those for JDK do.  If an unsigned
       
    38 # jar file is installed into JDK, things will break when the crypto
       
    39 # routines are called.
       
    40 #
       
    41 # This Makefile does the "real" build of the JCE files.  For OpenJDK,
       
    42 # the jar files built here are installed directly into the OpenJDK.
       
    43 #
       
    44 # For JDK, the binaries use pre-built/pre-signed binary files stored in
       
    45 # the closed workspace that are not shipped in the OpenJDK workspaces.
       
    46 # We still build the JDK files here to verify the files compile, and in
       
    47 # preparation for possible signing.  Developers working on JCE in JDK
       
    48 # must sign the JCE files before testing.  The JCE signing key is kept
       
    49 # separate from the JDK workspace to prevent its disclosure.
       
    50 #
       
    51 # SPECIAL NOTE TO JCE/JDK developers:  The source files must eventually
       
    52 # be built, signed, and then the resulting jar files MUST BE CHECKED
       
    53 # INTO THE CLOSED PART OF THE WORKSPACE*.  This separate step *MUST NOT
       
    54 # BE FORGOTTEN*, otherwise a bug fixed in the source code will not be
       
    55 # reflected in the shipped binaries.  The "release" target should be
       
    56 # used to generate the required files.
       
    57 #
       
    58 # There are a number of targets to help both JDK/OpenJDK developers.
       
    59 #
       
    60 # Main Targets (JDK/OPENJDK):
       
    61 #
       
    62 #     all/clobber/clean        The usual, plus the native libraries.
       
    63 #                                  If OpenJDK, installs sunmscapi.jar.
       
    64 #                                  If JDK, installs prebuilt
       
    65 #                                      sunmscapi.jar.
       
    66 #
       
    67 #     jar                      Builds/installs sunmscapi.jar
       
    68 #                                  If OpenJDK, does not sign.
       
    69 #                                  If JDK, tries to sign.
       
    70 #
       
    71 # Other lesser-used Targets (JDK/OPENJDK):
       
    72 #
       
    73 #     build-jar                Builds sunmscapi.jar
       
    74 #                                  (does not sign/install)
       
    75 #
       
    76 #     install-jar              Alias for "jar" above.
       
    77 #
       
    78 # Other targets (JDK only):
       
    79 #
       
    80 #     sign                     Alias for sign-jar
       
    81 #          sign-jar            Builds/signs sunmscapi.jar (no install)
       
    82 #
       
    83 #     release                  Builds all targets in preparation
       
    84 #                              for workspace integration.
       
    85 #
       
    86 #     install-prebuilt         Installs the pre-built jar files
       
    87 #
       
    88 # This makefile was written to support parallel target execution.
       
    89 #
       
    90 
       
    91 BUILDDIR = ../../..
       
    92 PACKAGE = sun.security.mscapi
       
    93 LIBRARY = sunmscapi
       
    94 PRODUCT = sun
       
    95 
       
    96 #
       
    97 # The following is for when we need to do postprocessing
       
    98 # (signing/obfuscation) against a read-only build.  If the OUTPUTDIR
       
    99 # isn't writable, the build currently crashes out.
       
   100 #
       
   101 ifndef OPENJDK
       
   102   ifdef ALT_JCE_BUILD_DIR
       
   103     # =====================================================
       
   104     # Where to place the output, in case we're building from a read-only
       
   105     # build area.  (e.g. a release engineering build.)
       
   106     JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR}
       
   107     IGNORE_WRITABLE_OUTPUTDIR_TEST=true
       
   108   else
       
   109     JCE_BUILD_DIR=${TEMPDIR}
       
   110   endif
       
   111 endif
       
   112 
       
   113 include $(BUILDDIR)/common/Defs.gmk
       
   114 
       
   115 CPLUSPLUSLIBRARY=true
       
   116 
       
   117 #
       
   118 # C++ and Java Files
       
   119 #
       
   120 include FILES_cpp.gmk
       
   121 
       
   122 AUTO_FILES_JAVA_DIRS = sun/security/mscapi
       
   123 
       
   124 #
       
   125 # Java files that define native methods
       
   126 #
       
   127 FILES_export = \
       
   128     sun/security/mscapi/KeyStore.java \
       
   129     sun/security/mscapi/Key.java \
       
   130     sun/security/mscapi/PRNG.java \
       
   131     sun/security/mscapi/RSACipher.java \
       
   132     sun/security/mscapi/RSAPublicKey.java \
       
   133     sun/security/mscapi/RSASignature.java \
       
   134     sun/security/mscapi/RSAKeyPairGenerator.java
       
   135 
       
   136 #
       
   137 # Find native code
       
   138 #
       
   139 vpath %.cpp \
       
   140   $(PLATFORM_SRC)/native/sun/security/mscapi
       
   141 
       
   142 #
       
   143 # Find include files
       
   144 #
       
   145 OTHER_INCLUDES += \
       
   146   -I$(PLATFORM_SRC)/native/sun/security/mscapi
       
   147 
       
   148 #
       
   149 # Rules
       
   150 #
       
   151 CLASSDESTDIR = $(TEMPDIR)/classes
       
   152 JAVAHFLAGS = -bootclasspath \
       
   153   "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)$(JCE_PATH)"
       
   154 
       
   155 include $(BUILDDIR)/common/Mapfile-vers.gmk
       
   156 
       
   157 include $(BUILDDIR)/common/Library.gmk
       
   158 
       
   159 #
       
   160 # Libraries to link
       
   161 #
       
   162 ifeq ($(PLATFORM), windows)
       
   163   OTHER_LDLIBS += Crypt32.Lib
       
   164 endif
       
   165 
       
   166 #
       
   167 # We use a variety of subdirectories in the $(TEMPDIR) depending on what
       
   168 # part of the build we're doing.  Both OPENJDK/JDK builds are initially
       
   169 # done in the unsigned area.  When files are signed in JDK,
       
   170 # they will be placed in the appropriate area.
       
   171 #
       
   172 UNSIGNED_DIR = $(TEMPDIR)/unsigned
       
   173 
       
   174 #
       
   175 # Rules
       
   176 #
       
   177 
       
   178 ifdef OPENJDK
       
   179 all: build-jar install-jar
       
   180 else
       
   181 all: build-jar install-prebuilt
       
   182 	$(build-warning)
       
   183 endif
       
   184 
       
   185 include $(BUILDDIR)/javax/crypto/Defs-jce.gmk
       
   186 
       
   187 
       
   188 # =====================================================
       
   189 # Build the unsigned sunmscapi.jar file.
       
   190 #
       
   191 
       
   192 JAR_DESTFILE = $(EXTDIR)/sunmscapi.jar
       
   193 
       
   194 #
       
   195 # The sunmscapi.jar needs to be in the extension class directory,
       
   196 # therefore none of its classes can appear in $(CLASSBINDIR).
       
   197 # Currently no one is using any of the MSCAPI internals, so these files
       
   198 # should not have been built.
       
   199 #
       
   200 
       
   201 #
       
   202 # Since the -C option to jar is used below, each directory entry must be
       
   203 # preceded with the appropriate directory to "cd" into.
       
   204 #
       
   205 JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS))
       
   206 
       
   207 build-jar: $(UNSIGNED_DIR)/sunmscapi.jar
       
   208 
       
   209 #
       
   210 # Build sunmscapi.jar.
       
   211 #
       
   212 $(UNSIGNED_DIR)/sunmscapi.jar: build
       
   213 	$(prep-target)
       
   214 	$(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \
       
   215 	    $(BOOT_JAR_JFLAGS)
       
   216 	@$(java-vm-cleanup)
       
   217 
       
   218 
       
   219 ifndef OPENJDK
       
   220 # =====================================================
       
   221 # Sign the provider jar file.  Not needed for OpenJDK.
       
   222 #
       
   223 
       
   224 SIGNED_DIR = $(JCE_BUILD_DIR)/signed
       
   225 
       
   226 sign: sign-jar
       
   227 
       
   228 sign-jar: $(SIGNED_DIR)/sunmscapi.jar
       
   229 
       
   230 ifndef ALT_JCE_BUILD_DIR
       
   231 $(SIGNED_DIR)/sunmscapi.jar: $(UNSIGNED_DIR)/sunmscapi.jar
       
   232 else
       
   233 #
       
   234 # We have to remove the build dependency, otherwise, we'll try to rebuild it
       
   235 # which we can't do on a read-only filesystem.
       
   236 #
       
   237 $(SIGNED_DIR)/sunmscapi.jar:
       
   238 	@if [ ! -r $(UNSIGNED_DIR)/sunmscapi.jar ] ; then \
       
   239 	    $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunmscapi.jar"; \
       
   240 	    exit 1; \
       
   241 	fi
       
   242 endif
       
   243 	$(call sign-file, $(UNSIGNED_DIR)/sunmscapi.jar)
       
   244 
       
   245 
       
   246 # =====================================================
       
   247 # Create the Release Engineering files.  Signed builds, etc.
       
   248 #
       
   249 
       
   250 release: $(SIGNED_DIR)/sunmscapi.jar
       
   251 	$(RM) $(JCE_BUILD_DIR)/release/sunmscapi.jar
       
   252 	$(MKDIR) -p $(JCE_BUILD_DIR)/release
       
   253 	$(CP) $(SIGNED_DIR)/sunmscapi.jar $(JCE_BUILD_DIR)/release
       
   254 	$(release-warning)
       
   255 
       
   256 endif # OPENJDK
       
   257 
       
   258 
       
   259 # =====================================================
       
   260 # Install routines.
       
   261 #
       
   262 
       
   263 #
       
   264 # Install sunmscapi.jar, depending on which type is requested.
       
   265 #
       
   266 install-jar jar: $(JAR_DESTFILE)
       
   267 ifndef OPENJDK
       
   268 	$(release-warning)
       
   269 endif
       
   270 
       
   271 ifdef OPENJDK
       
   272 $(JAR_DESTFILE): $(UNSIGNED_DIR)/sunmscapi.jar
       
   273 else
       
   274 $(JAR_DESTFILE): $(SIGNED_DIR)/sunmscapi.jar
       
   275 endif
       
   276 	$(install-file)
       
   277 
       
   278 ifndef OPENJDK
       
   279 install-prebuilt:
       
   280 	@$(ECHO) "\n>>>Installing prebuilt SunMSCAPI provider..."
       
   281 	$(RM) $(JAR_DESTFILE)
       
   282 	$(CP) $(PREBUILT_DIR)/mscapi/sunmscapi.jar $(JAR_DESTFILE)
       
   283 endif
       
   284 
       
   285 
       
   286 # =====================================================
       
   287 # Support routines.
       
   288 #
       
   289 
       
   290 clobber clean::
       
   291 	$(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR)
       
   292 
       
   293 .PHONY: build-jar jar install-jar
       
   294 ifndef OPENJDK
       
   295 .PHONY: sign sign-jar release install-prebuilt
       
   296 endif