nb_create/nb_create.sh

206 lines
6.1 KiB
Bash
Executable file

#!/usr/bin/env bash
# Convenience script to create a C/C++ NeteBeans project.
# Copyright (C) 26.5.2025 Benny Lyons benny.lyons@gmx.net
#
# nb_create.sh is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program 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 for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, see <https://www.gnu.org/licenses/>.
#
# Default settings
#
# Default Git repository containing Makefile, NetBeans project file, ...
# Override this using -r my_repo.git; or reset this
DEFAULT_REPO="https://codeberg.org/mebenn/netbeans_generic.git/"
this_script=$(basename -- $0)
USE_PROGRAMME=git
help() {
cat <<EOF
Usage: $this_script [OPTIONS] params
Convenience script to create C/C++ NetBeans projects.
Create a generic NetBeans project from a Git repo.
Project name, file containing main and a Git repo
can be specified using command line options, or
defaults can be used.
Options:
-d [--debug]
Add extra debugging infos
-h [--help]
print this help
-m [--main] <name_of_file_containing_main>
The name of the file that contains the main function
default: name of the project
-p [--project] <propject_name>
Provide a name of the project instead of the default
default: name of the current directory
-r [--repo] <git_repo>
The Git repo containing the NetBeans generic C/C++ project
Default: /home/benn/share/home/repo/netbeans_proj/netbeans_generic.git
Licence:
$this_script Copyright (C) 2025 Benny Lyons.
GNU GPL2 or later; see LICENCE distributed with this file for more details.
EOF
}
if_no_dir_then_exit()
{
exist_dir=$1
message=$2
if [ ! -d $exist_dir ]; then
echo "ERROR: Can't find: "$exist_dir
echo " $message"
exit 1
fi
}
if_no_file_then_exit()
{
exist_file=$1
message=$2
if [ ! -f $exist_file ]; then
echo "ERROR: Can't find: "$exist_file
echo " $message"
exit 1
fi
}
main()
{
OPT_DEBUG=False # By default, debugging is off
OPT_ALL="$(getopt -o dhm:p:r: -l debug,help,main:,project:,repo: --name "$0" -- "$@")"
eval set -- "$OPT_ALL"
while true ; do
case $1 in
-d | --debug)
OPT_DEBUG=True
shift
;;
-h | --help) # Call help
help
exit 0
;;
-m | --main)
OPT_MAIN=$2
;;
-p | --project)
OPT_PROJECT=$2
#shift 2
;;
-r | --repo )
OPT_REPO=$2
#shift 2
;;
--)
shift
break
;;
*)
echo "Invalid argument" >&2
exit 1
;;
esac
done
if [[ $OPT_DEBUG == "True" ]]; then
trap 'echo "At line $LINENO: $BASH_COMMAND"' DEBUG
fi
if ! command -v "${USE_PROGRAMME}" > /dev/null; then
echo "ERROR: cannot find " $USE_PROGRAMME
echo " You must install "$USE_PROGRAMME
exit 1
fi
pwd="$PWD"
#
# Set defaults
#
if [ -z $OPT_PROJECT ]; then
PROJECT=$(basename $pwd)
else
PROJECT="$OPT_PROJECT"
fi
if [ -z $OPT_MAIN ]; then
MAIN="$PROJECT"
else
MAIN="$OPT_MAIN"
fi
if [ -z $OPT_REPO ]; then
REPO=$DEFAULT_REPO
else
REPO="$OPT_REPO"
fi
#
# Do
#
cd $pwd
[ ! -d ".git" ] && echo "Checking out repo..." && $(git clone $REPO .)
[ ! -d ".git" ] && echo "ERROR: not a Git repo" && exit 1
if_no_dir_then_exit $pwd/nbproject "Not a NetBeans project"
if_no_file_then_exit $pwd/nbproject/project.xml "Netbeans project without a configuration file!"
if [ ! -f "compile_commands.json" ]; then
echo "WARNING: ./compile_commands.json not found"
echo " Netbeans project without a compilation database"
echo " Target check2 will not work"
echo " Generate compilation database: bear -- make"
else
replace="directory"
replacement="$pwd"
sed -i "s%^\s*\"$replace\"\:.*%\"directory\"\:\ \"$replacement\"\,%g" compile_commands.json
replace="file"
replacement="$pwd""/src/${MAIN}.cpp"
sed -i "s%^\s*\"$replace\"\:.*%\"file\"\:\ \"$replacement\"\,%g" compile_commands.json
replace="output"
replacement="$pwd""/obj/${MAIN}.obj"
sed -i "s%^\s*\"$replace\"\:.*%\"output\"\:\ \"$replacement\"\,%g" compile_commands.json
fi
cd $pwd/nbproject
sed -i -e "s/<name>.*<\/name>/<name>$PROJECT<\/name>/g" project.xml
cd "$pwd"/src
if [ -f ./myapp.cpp ]; then
mv myapp.cpp "$MAIN".cpp
fi
}
main $@