diff --git a/bin/idea.sh b/bin/idea.sh
index 1d90ab82d366..11c727dd936b 100644
--- a/bin/idea.sh
+++ b/bin/idea.sh
@@ -169,6 +169,8 @@ if [ "$ABSOLUTE_PATHS" = true ] ; then
MODULE_DIR="$PROJECT_DIR"
TOPLEVEL_MODULE_DIR="$TOPLEVEL_PROJECT_DIR"
cd "$IDEA_OUTPUT_PARENT" && cd "$RELATIVE_BUILD_DIR" && BUILD_DIR="`pwd`"
+ CLION_SCRIPT_TOPDIR="$OPENJDK_DIR"
+ CLION_PROJECT_DIR="$PROJECT_DIR"
else
if [ "$RELATIVE_PROJECT_DIR" = "." ] ; then
PROJECT_DIR=""
@@ -185,6 +187,8 @@ else
TOPLEVEL_MODULE_DIR="\$MODULE_DIR\$$TOPLEVEL_PROJECT_DIR"
TOPLEVEL_PROJECT_DIR="\$PROJECT_DIR\$$TOPLEVEL_PROJECT_DIR"
BUILD_DIR="\$PROJECT_DIR\$/$RELATIVE_BUILD_DIR"
+ CLION_SCRIPT_TOPDIR="$CLION_RELATIVE_PROJECT_DIR"
+ CLION_PROJECT_DIR="\$PROJECT_DIR\$/$CLION_SCRIPT_TOPDIR"
fi
if [ "$VERBOSE" = true ] ; then
echo "Project root: $PROJECT_DIR"
@@ -214,6 +218,9 @@ add_replacement() {
eval TO$NUM_REPLACEMENTS='$2'
}
+add_replacement "###PATHTOOL###" "$PATHTOOL"
+add_replacement "###CLION_SCRIPT_TOPDIR###" "$CLION_SCRIPT_TOPDIR"
+add_replacement "###CLION_PROJECT_DIR###" "$CLION_PROJECT_DIR"
add_replacement "###PROJECT_DIR###" "$PROJECT_DIR"
add_replacement "###MODULE_DIR###" "$MODULE_DIR"
add_replacement "###TOPLEVEL_PROJECT_DIR###" "$TOPLEVEL_PROJECT_DIR"
@@ -221,6 +228,7 @@ add_replacement "###TOPLEVEL_MODULE_DIR###" "$TOPLEVEL_MODULE_DIR"
add_replacement "###MODULE_NAMES###" "$MODULE_NAMES"
add_replacement "###VCS_TYPE###" "$VCS_TYPE"
add_replacement "###BUILD_DIR###" "$BUILD_DIR"
+add_replacement "###RELATIVE_BUILD_DIR###" "$RELATIVE_BUILD_DIR"
if [ "x$PATHTOOL" != "x" ]; then
add_replacement "###BASH_RUNNER_PREFIX###" "\$PROJECT_DIR\$/.idea/bash.bat"
else
@@ -301,3 +309,15 @@ if [ "x$PATHTOOL" != "x" ]; then
echo "$WINENV_ROOT\bin\bash.exe -l -c \"cd %CD:\=/%/ && %*\"" >> "$IDEA_OUTPUT/bash.bat"
fi
fi
+
+
+
+if [ "$VERBOSE" = true ] ; then
+ IDEA_PROJECT_DIR="`dirname $IDEA_OUTPUT`"
+ if [ "x$PATHTOOL" != "x" ]; then
+ IDEA_PROJECT_DIR="`$PATHTOOL -am $IDEA_PROJECT_DIR`"
+ fi
+ echo "
+Now you can open \"$IDEA_PROJECT_DIR\" as IDEA project
+You can also run 'bash \"$IDEA_OUTPUT/jdk-clion/update-project.sh\"' to generate Clion project"
+fi
\ No newline at end of file
diff --git a/make/ide/idea/jdk/idea.gmk b/make/ide/idea/jdk/idea.gmk
index da3ef886c62a..9d1673237458 100644
--- a/make/ide/idea/jdk/idea.gmk
+++ b/make/ide/idea/jdk/idea.gmk
@@ -57,6 +57,7 @@ else #with SPEC
$(ECHO) "RELATIVE_TOPLEVEL_PROJECT_DIR=\"$(call RelativePath,$(TOPLEVEL_DIR),$(IDEA_OUTPUT_PARENT))\"" >> $(OUT)
$(ECHO) "RELATIVE_PROJECT_DIR=\"$(call RelativePath,$(topdir),$(IDEA_OUTPUT_PARENT))\"" >> $(OUT)
$(ECHO) "RELATIVE_BUILD_DIR=\"$(call RelativePath,$(OUTPUTDIR),$(IDEA_OUTPUT_PARENT))\"" >> $(OUT)
+ $(ECHO) "CLION_RELATIVE_PROJECT_DIR=\"$(call RelativePath,$(topdir),$(IDEA_OUTPUT_PARENT)/.idea/jdk-clion)\"" >> $(OUT)
$(ECHO) "PATHTOOL=\"$(PATHTOOL)\"" >> $(OUT)
$(ECHO) "JT_HOME=\"$(JT_HOME)\"" >> $(OUT)
$(ECHO) "WINENV_ROOT=\"$(WINENV_ROOT)\"" >> $(OUT)
diff --git a/make/ide/idea/jdk/template/.name b/make/ide/idea/jdk/template/jdk-clion/.idea/.name
similarity index 100%
rename from make/ide/idea/jdk/template/.name
rename to make/ide/idea/jdk/template/jdk-clion/.idea/.name
diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/misc.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/misc.xml
new file mode 100644
index 000000000000..787e31971f49
--- /dev/null
+++ b/make/ide/idea/jdk/template/jdk-clion/.idea/misc.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/vcs.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/vcs.xml
new file mode 100644
index 000000000000..726bb30b95c9
--- /dev/null
+++ b/make/ide/idea/jdk/template/jdk-clion/.idea/vcs.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/make/ide/idea/jdk/template/jdk-clion/.idea/workspace.xml b/make/ide/idea/jdk/template/jdk-clion/.idea/workspace.xml
new file mode 100644
index 000000000000..221cc601bdf0
--- /dev/null
+++ b/make/ide/idea/jdk/template/jdk-clion/.idea/workspace.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/make/ide/idea/jdk/template/jdk-clion/update-project.sh b/make/ide/idea/jdk/template/jdk-clion/update-project.sh
new file mode 100644
index 000000000000..571145aabdf9
--- /dev/null
+++ b/make/ide/idea/jdk/template/jdk-clion/update-project.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+TOPDIR="###CLION_SCRIPT_TOPDIR###"
+BUILD_DIR="###RELATIVE_BUILD_DIR###"
+PATHTOOL="###PATHTOOL###"
+
+
+
+cd "`dirname $0`"
+SCRIPT_DIR="`pwd`"
+cd "$TOPDIR"
+
+echo "Updating Clion project files in \"$SCRIPT_DIR\" for project \"`pwd`\""
+
+set -o pipefail
+make compile-commands SPEC="$BUILD_DIR/spec.gmk" | sed 's/^/ /' || exit 1
+
+if [ "x$PATHTOOL" != "x" ]; then
+ CLION_PROJECT_DIR="`$PATHTOOL -am $SCRIPT_DIR`"
+ sed "s/\\\\\\\\\\\\\\\\/\\\\\\\\/g" "$BUILD_DIR/compile_commands.json" > "$SCRIPT_DIR/compile_commands.json"
+else
+ CLION_PROJECT_DIR="$SCRIPT_DIR"
+ cp "$BUILD_DIR/compile_commands.json" "$SCRIPT_DIR"
+fi
+
+echo "
+Now you can open \"$CLION_PROJECT_DIR\" as Clion project
+If Clion complains about missing files when loading a project, building it may help:
+ cd \"`pwd`\" && make SPEC=\"$BUILD_DIR/spec.gmk\""
diff --git a/make/ide/idea/jdk/template/vcs.xml b/make/ide/idea/jdk/template/vcs.xml
index 9ba53c5f1f1e..31bda57fe54a 100644
--- a/make/ide/idea/jdk/template/vcs.xml
+++ b/make/ide/idea/jdk/template/vcs.xml
@@ -4,8 +4,8 @@
-
-
+
+