
# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

include $(SPEC)
include MakeBase.gmk

default: all

COMPILE_COMMANDS := $(OUTPUTDIR)/compile_commands.json

# Perform basic compile_commands.json validation:
#  - should start with [ and end with ]
#  - should contain at least one entry (opening {)
#  - last entry should not have a trailing comma (end with })
verify-compile-commands-json:
	$(HEAD) -n 1 $(COMPILE_COMMANDS) | $(GREP) -q -e "^\[$$"
	$(TAIL) -1 $(COMPILE_COMMANDS) | $(GREP) -q -e "^\]$$"
	$(HEAD) -n 2 $(COMPILE_COMMANDS) | $(GREP) -q -e "{"
	$(TAIL) -2 $(COMPILE_COMMANDS) | $(GREP) -q -e "}$$"

# Ensure that no native shared library for hotspot was created during the
# build. Checking hotspot only since on Windows the jdk folders are prepopulated
# with CRT DLLs. Also note that this test requires a clean build folder.
verify-no-shared-libraries:
	$(FIND) $(OUTPUTDIR)/hotspot -type f -name "*$(SHARED_LIBRARY_SUFFIX)" \
	    -exec false {} +

TEST_TARGETS += verify-compile-commands-json verify-no-shared-libraries

all: $(TEST_TARGETS)

.PHONY: default all verify-compile-commands
