Skip to content

Instantly share code, notes, and snippets.

@funatsufumiya
Last active May 6, 2024 04:02
Show Gist options
  • Save funatsufumiya/7a4fa3f9e8571489a25582b9d07b4ef0 to your computer and use it in GitHub Desktop.
Save funatsufumiya/7a4fa3f9e8571489a25582b9d07b4ef0 to your computer and use it in GitHub Desktop.
VSCode Project Generator for openFrameworks 0.9.8 - 0.12.x, compatible with Mac, Windows (git-bash), Linux
#!/bin/bash
##
## << How to install >>
## $ curl -Lo g.sh http://bit.ly/of-vscode
## $ chmod +x g.sh
## $ mv g.sh /usr/local/bin/of-vscode-project-generator
##
echo
echo "======================================"
echo " of-vscode-project-generator"
echo "======================================"
echo
echo "Usage:"
echo " $ of-vscode-project-generator /path/to/apps/myApps/xxx"
echo " or"
echo " $ cd /path/to/apps/myApps/xxx && of-vscode-project-generator"
echo
echo "------"
echo
realpath ()
{
f=$@;
if [ -d "$f" ]; then
base="";
dir="$f";
else
base="/$(basename "$f")";
dir=$(dirname "$f");
fi;
dir=$(cd "$dir" && /bin/pwd);
echo "$dir$base"
}
if [ "$(uname)" == 'Darwin' ]; then
OS='Mac'
elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
OS='Linux'
elif [ "$(expr substr $(uname -s) 1 10)" == 'MINGW32_NT' ]; then
OS='Win32'
elif [ "$COMSPEC" != "" ]; then
OS='Win32'
fi
echo "[Info] OS: $OS"
proj=$(realpath $1)
echo "[Info] project path: '$proj'"
cd $proj
if [ ! -e "./src/ofApp.h" ]; then
echo "[Warning] This directory seems not to be valid app path!"
read -p " Are you sure to proceed? (Y/n): " YN
if [ ! "${YN}" = "Y" ]; then
echo "cancelled."
exit 1;
fi
fi
if [ -e "./.vscode/c_cpp_properties.json" ]; then
echo "[Warning] '.vscode/c_cpp_properties.json' already exists!"
read -p " Are you sure to proceed? (Y/n): " YN
if [ ! "${YN}" = "Y" ]; then
echo "cancelled."
exit 1;
fi
fi
if [ ! -d "../../../apps" ]; then
_path=$(realpath ../../../)
echo "[Error] '$_path' is not OF root. Stops."
exit 1;
fi
OF_ROOT=../../..
path_list_file=$(mktemp)
echo "$OF_ROOT/libs/openFrameworks" >> $path_list_file
echo "$OF_ROOT/libs/openFrameworks/__" >> $path_list_file
#echo "$OF_ROOT/libs" >> $path_list_file
if [ -d "$OF_ROOT/libs" ]; then
for i in $(ls $OF_ROOT/libs); do
if [[ ! $i == "openFrameworks" ]]; then
p="$OF_ROOT/libs/$i"
if [ -d $p/include ]; then
echo "$p/include" >> $path_list_file
if [[ $i == "cairo" ]]; then
echo "$p/include/__" >> $path_list_file
fi
fi
fi
done
fi
if [ -e addons.make ]; then
echo "[Info] Reading addons.make"
for addon in $(cat addons.make); do
addon_path=$addon
if [[ ! $addon == addons/* ]]; then
addon_path=$OF_ROOT/addons/$addon
fi
if [ ! -d $addon_path ]; then
echo "[Error] '$addon_path' doesn't exist. Stops."
exit 1
fi
echo "[Info] Cheking '$addon_path'"
if [ -d $addon_path/src ]; then
echo "$addon_path/src" >> $path_list_file
echo "$addon_path/src/__" >> $path_list_file
fi
if [ -d $addon_path/libs ]; then
for lib in $(ls $addon_path/libs); do
lib_path=$addon_path/libs/$lib
if [ -d $lib_path/src ]; then
echo "$lib_path/src" >> $path_list_file
fi
if [ -d $lib_path/include ]; then
echo "$lib_path/include" >> $path_list_file
fi
done # end for libs
fi
done # end for addons.make
fi
list=$(mktemp)
sp=" "
echo "[Info] Generating..."
echo "$sp\"\${workspaceFolder}/**\"," >> $list
echo "$sp\"\${workspaceFolder}/src\"," >> $list
echo "$sp\"\${workspaceFolder}/src/**\"," >> $list
for i in $(cat $path_list_file); do
r=$(realpath $i)
r=$(echo $r | sed -e 's/^\/c/C:/')
if [[ $r == *__ ]]; then
r=$(echo $r | sed -e 's/__$/**/')
fi
echo "$sp\"$r\"," >> $list
done # end for path_list_file
echo "$sp\"\${workspaceFolder}\"" >> $list
f=$(cat << EOS
{
"configurations": [
{
"name": "$(echo $OS)",
"includePath": [
$(cat $list)
],
"defines": [],
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
EOS
)
mkdir -p ./.vscode
touch ./.vscode/c_cpp_properties.json
echo $f > ./.vscode/c_cpp_properties.json
echo "[Info] Done!"
echo "[Info] Saved to '$proj/.vscode/c_cpp_properties.json' :)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment