github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/make/core/apidiff.mk (about)

     1  #
     2  # Copyright (C) 2017 The Android Open Source Project
     3  #
     4  # Licensed under the Apache License, Version 2.0 (the "License");
     5  # you may not use this file except in compliance with the License.
     6  # You may obtain a copy of the License at
     7  #
     8  #      http://www.apache.org/licenses/LICENSE-2.0
     9  #
    10  # Unless required by applicable law or agreed to in writing, software
    11  # distributed under the License is distributed on an "AS IS" BASIS,
    12  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  # See the License for the specific language governing permissions and
    14  # limitations under the License.
    15  #
    16  
    17  ##
    18  ##
    19  ## Common to both jdiff and javadoc
    20  ##
    21  ##
    22  
    23  LOCAL_IS_HOST_MODULE := $(call true-or-empty,$(LOCAL_IS_HOST_MODULE))
    24  ifeq ($(LOCAL_IS_HOST_MODULE),true)
    25  my_prefix := HOST_
    26  LOCAL_HOST_PREFIX :=
    27  else
    28  my_prefix := TARGET_
    29  endif
    30  
    31  LOCAL_MODULE_CLASS := $(strip $(LOCAL_MODULE_CLASS))
    32  ifndef LOCAL_MODULE_CLASS
    33  $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined)
    34  endif
    35  
    36  full_src_files := $(patsubst %,$(LOCAL_PATH)/%,$(LOCAL_SRC_FILES))
    37  out_dir := $(OUT_DOCS)/$(LOCAL_MODULE)/api_diff/current
    38  full_target := $(call doc-timestamp-for,$(LOCAL_MODULE)-diff)
    39  
    40  ifeq ($(LOCAL_IS_HOST_MODULE),true)
    41  $(full_target): PRIVATE_BOOTCLASSPATH :=
    42  full_java_libs := $(addprefix $(HOST_OUT_JAVA_LIBRARIES)/,\
    43    $(addsuffix $(COMMON_JAVA_PACKAGE_SUFFIX),$(LOCAL_JAVA_LIBRARIES)))
    44  full_java_lib_deps := $(full_java_libs)
    45  
    46  else
    47  
    48  ifneq ($(LOCAL_SDK_VERSION),)
    49    ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current)
    50      # Use android_stubs_current if LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS.
    51      LOCAL_JAVA_LIBRARIES := android_stubs_current $(LOCAL_JAVA_LIBRARIES)
    52      $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, android_stubs_current)
    53    else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current)
    54      LOCAL_JAVA_LIBRARIES := android_system_stubs_current $(LOCAL_JAVA_LIBRARIES)
    55      $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, android_system_stubs_current)
    56    else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),test_current)
    57      LOCAL_JAVA_LIBRARIES := android_test_stubs_current $(LOCAL_JAVA_LIBRARIES)
    58      $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, android_test_stubs_current)
    59    else
    60      # core_<ver> is subset of <ver>. Instead of defining a prebuilt lib for core_<ver>,
    61      # use the stub for <ver> when building for apps.
    62      _version := $(patsubst core_%,%,$(LOCAL_SDK_VERSION))
    63      LOCAL_JAVA_LIBRARIES := sdk_v$(_version) $(LOCAL_JAVA_LIBRARIES)
    64      $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, sdk_v$(_version))
    65      _version :=
    66    endif
    67  else
    68    LOCAL_JAVA_LIBRARIES := core-oj core-libart ext framework $(LOCAL_JAVA_LIBRARIES)
    69    $(full_target): PRIVATE_BOOTCLASSPATH := $(call java-lib-files, core-oj):$(call java-lib-files, core-libart)
    70  endif  # LOCAL_SDK_VERSION
    71  LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES))
    72  
    73  full_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES)) $(LOCAL_CLASSPATH)
    74  full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES)) $(LOCAL_CLASSPATH)
    75  endif # !LOCAL_IS_HOST_MODULE
    76  
    77  $(full_target): PRIVATE_CLASSPATH := $(subst $(space),:,$(full_java_libs))
    78  $(full_target): PRIVATE_DOCLAVA_CLASSPATH := $(HOST_OUT_JAVA_LIBRARIES)/jsilver$(COMMON_JAVA_PACKAGE_SUFFIX):$(HOST_OUT_JAVA_LIBRARIES)/doclava$(COMMON_JAVA_PACKAGE_SUFFIX)
    79  
    80  intermediates.COMMON := $(call local-intermediates-dir,COMMON)
    81  
    82  $(full_target): PRIVATE_SOURCE_PATH := $(call normalize-path-list,$(LOCAL_DROIDDOC_SOURCE_PATH))
    83  $(full_target): PRIVATE_JAVA_FILES := $(filter %.java,$(full_src_files))
    84  $(full_target): PRIVATE_JAVA_FILES += $(addprefix $($(my_prefix)OUT_COMMON_INTERMEDIATES)/, $(filter %.java,$(LOCAL_INTERMEDIATE_SOURCES)))
    85  $(full_target): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/src
    86  $(full_target): PRIVATE_SRC_LIST_FILE := $(intermediates.COMMON)/droiddoc-src-list
    87  
    88  ifneq ($(strip $(LOCAL_ADDITIONAL_JAVA_DIR)),)
    89  $(full_target): PRIVATE_ADDITIONAL_JAVA_DIR := $(LOCAL_ADDITIONAL_JAVA_DIR)
    90  endif
    91  
    92  # Lists the input files for the doc build into a text file
    93  # suitable for the @ syntax of javadoc.
    94  # $(1): the file to create
    95  # $(2): files to include
    96  # $(3): list of directories to search for java files in
    97  define prepare-doc-source-list
    98  $(hide) mkdir -p $(dir $(1))
    99  $(call dump-words-to-file, $(2), $(1))
   100  $(hide) for d in $(3) ; do find $$d -name '*.java' -and -not -name '.*' >> $(1) 2> /dev/null ; done ; true
   101  endef
   102  
   103  ##
   104  ##
   105  ## jdiff only
   106  ##
   107  ##
   108  
   109  jdiff := \
   110  	$(HOST_JDK_TOOLS_JAR) \
   111  	$(HOST_OUT_JAVA_LIBRARIES)/jdiff$(COMMON_JAVA_PACKAGE_SUFFIX)
   112  
   113  doclava := \
   114  	$(HOST_JDK_TOOLS_JAR) \
   115  	$(HOST_OUT_JAVA_LIBRARIES)/doclava$(COMMON_JAVA_PACKAGE_SUFFIX)
   116  
   117  $(full_target): PRIVATE_NEWAPI := $(LOCAL_APIDIFF_NEWAPI)
   118  $(full_target): PRIVATE_OLDAPI := $(LOCAL_APIDIFF_OLDAPI)
   119  $(full_target): PRIVATE_OUT_DIR := $(out_dir)
   120  $(full_target): PRIVATE_OUT_NEWAPI := $(out_dir)/current.xml
   121  $(full_target): PRIVATE_OUT_OLDAPI := $(out_dir)/$(notdir $(basename $(LOCAL_APIDIFF_OLDAPI))).xml
   122  $(full_target): PRIVATE_DOCLETPATH := $(HOST_OUT_JAVA_LIBRARIES)/jdiff$(COMMON_JAVA_PACKAGE_SUFFIX)
   123  $(full_target): \
   124  		$(full_src_files) \
   125  		$(full_java_lib_deps) \
   126  		$(jdiff) \
   127  		$(doclava) \
   128  		$(LOCAL_MODULE)-docs \
   129  		$(LOCAL_ADDITIONAL_DEPENDENCIES)
   130  	@echo Generating API diff: $(PRIVATE_OUT_DIR)
   131  	@echo   Old API: $(PRIVATE_OLDAPI)
   132  	@echo   New API: $(PRIVATE_NEWAPI)
   133  	@echo   Old XML: $(PRIVATE_OUT_OLDAPI)
   134  	@echo   New XML: $(PRIVATE_OUT_NEWAPI)
   135  	$(hide) mkdir -p $(dir $@)
   136  	@echo Converting API files to XML...
   137  	$(hide) mkdir -p $(PRIVATE_OUT_DIR)
   138  	$(hide) ( \
   139  		$(JAVA) \
   140  				$(addprefix -classpath ,$(PRIVATE_CLASSPATH):$(PRIVATE_DOCLAVA_CLASSPATH):$(PRIVATE_BOOTCLASSPATH):$(HOST_JDK_TOOLS_JAR)) \
   141  				com.google.doclava.apicheck.ApiCheck \
   142  				-convert2xml \
   143  					$(basename $(PRIVATE_NEWAPI)).txt \
   144  					$(basename $(PRIVATE_OUT_NEWAPI)).xml \
   145  	) || (rm -rf $(PRIVATE_OUT_DIR) $(PRIVATE_SRC_LIST_FILE); exit 45)
   146  	$(hide) ( \
   147  		$(JAVA) \
   148  				$(addprefix -classpath ,$(PRIVATE_CLASSPATH):$(PRIVATE_DOCLAVA_CLASSPATH):$(PRIVATE_BOOTCLASSPATH):$(HOST_JDK_TOOLS_JAR)) \
   149  				com.google.doclava.apicheck.ApiCheck \
   150  				-convert2xml \
   151  					$(basename $(PRIVATE_OLDAPI)).txt \
   152  					$(basename $(PRIVATE_OUT_OLDAPI)).xml \
   153  	) || (rm -rf $(PRIVATE_OUT_DIR) $(PRIVATE_SRC_LIST_FILE); exit 45)
   154  	@echo Running JDiff...
   155  	$(call prepare-doc-source-list,$(PRIVATE_SRC_LIST_FILE),$(PRIVATE_JAVA_FILES), \
   156  			$(PRIVATE_SOURCE_INTERMEDIATES_DIR) $(PRIVATE_ADDITIONAL_JAVA_DIR))
   157  	$(hide) ( \
   158  		$(JAVADOC) \
   159  				-encoding UTF-8 \
   160  				\@$(PRIVATE_SRC_LIST_FILE) \
   161  				-J-Xmx1600m \
   162  				-XDignore.symbol.file \
   163  				-quiet \
   164  				-doclet jdiff.JDiff \
   165  				-docletpath $(PRIVATE_DOCLETPATH) \
   166  				$(addprefix -bootclasspath ,$(PRIVATE_BOOTCLASSPATH)) \
   167  				$(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \
   168  				-sourcepath $(PRIVATE_SOURCE_PATH)$(addprefix :,$(PRIVATE_CLASSPATH)) \
   169  				-d $(PRIVATE_OUT_DIR) \
   170  				-newapi $(notdir $(basename $(PRIVATE_OUT_NEWAPI))) \
   171  				-newapidir $(dir $(PRIVATE_OUT_NEWAPI)) \
   172  				-oldapi $(notdir $(basename $(PRIVATE_OUT_OLDAPI))) \
   173  				-oldapidir $(dir $(PRIVATE_OUT_OLDAPI)) \
   174  				-javadocnew ../../../reference/ \
   175  		&& touch -f $@ \
   176  	) || (rm -rf $(PRIVATE_OUT_DIR) $(PRIVATE_SRC_LIST_FILE); exit 45)
   177  
   178  ALL_DOCS += $(full_target)
   179  
   180  .PHONY: $(LOCAL_MODULE)-diff
   181  $(LOCAL_MODULE)-diff : $(full_target)