Compare commits

...

No commits in common. "1e296f3c167cfcc86502fe98cdbf449ce227cb0b" and "806b23c3d48b5942956cdff773a28218c5c1168e" have entirely different histories.

3 changed files with 249 additions and 3 deletions

View file

@ -1,3 +0,0 @@
# nb_create
Convenience script to create a C/C++ NetBeans project

25
Readme.txt Normal file
View file

@ -0,0 +1,25 @@
# nb_create
Convenience script to create a C/C++ NetBeans project
Usage: nb_create.sh [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:
-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 oof 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

224
nb_create.sh Executable file
View file

@ -0,0 +1,224 @@
#!/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 a C/C++ NetBeans projects.
Create a generic NetBeans projec using a Git repo.
Project name and file containing main are by default
the name of the current directory. These can be changed
by using command line options.
The Makefile currently has these targets:
debug:
check1: cppcheck static analysis
check2: clang-tidy
Options:
-d [--debug]
Add extra debugging infos for this script
-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: https://codeberg.org/mebenn/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 1
;;
-h | --help) # Call help
help
exit 0
;;
-m | --main)
OPT_MAIN=$2
shift 2
;;
-p | --project)
OPT_PROJECT=$2
shift 2
;;
-r | --repo )
OPT_REPO=$2
shift 2
;;
--)
shift
break
;;
*)
echo "Invalid argument"
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_no_file_then_exit $pwd/Makefile "Makefile not found"
# update compile_commands.json
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
sed -i "/obj\/myapp.o/c\"obj\/${MAIN}.o\"\," compile_commands.json
sed -i "/src\/myapp.cpp/c\"src\/${MAIN}.cpp\"\," compile_commands.json
fi
# update Makefile
sed -i -e "s/myapp/$MAIN/g" Makefile
# update nbproject
cd $pwd/nbproject
sed -i -e "s/<name>.*<\/name>/<name>$PROJECT<\/name>/g" project.xml
# update configurations.xml
sed -i -e "s/myapp/$MAIN/g" configurations.xml
cd "$pwd"/src
if [ -f ./myapp.cpp ]; then
mv myapp.cpp "$MAIN".cpp
fi
}
main $@