Changeset - r22676:c634fbd918c5
[Not reviewed]
master
0 2 1
frosch - 7 years ago 2017-08-24 14:50:55
frosch@openttd.org
(svn r27897) -Add [FS#6577]: Project file generator for kdevelop 4/5 (adf88)
3 files changed with 209 insertions and 0 deletions:
0 comments (0 inline, 0 general)
.gitignore
Show inline comments
 
@@ -23,6 +23,9 @@ bundles/*
 
docs/aidocs/*
 
docs/gamedocs/*
 
docs/source/*
 
.kdev4
 
.kdev4/*
 
*.kdev4
 
media/openttd.desktop
 
media/openttd.desktop.install
 
objs/*
.hgignore
Show inline comments
 
@@ -13,6 +13,9 @@ config.pwd
 
docs/aidocs/*
 
docs/gamedocs/*
 
docs/source/*
 
.kdev4
 
.kdev4/*
 
*.kdev4
 
Makefile
 
Makefile.am
 
Makefile.bundle
projects/gen-kdev4.sh
Show inline comments
 
new file 100755
 
#!/bin/sh
 

	
 
# $Id$
 

	
 
# This file is part of OpenTTD.
 
# OpenTTD 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, version 2.
 
# OpenTTD 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 OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 

	
 
# echo without interpretation of backslash escapes and without
 
# adding newline at the end - just the string as it is
 
rawprint()
 
{
 
	printf '%s' "$@"
 
}
 

	
 
encode_dword()
 
{
 
	printf '\x%02x' \
 
		`expr $1 / 16777216 % 256` \
 
		`expr $1 / 65536    % 256` \
 
		`expr $1 / 256      % 256` \
 
		`expr $1            % 256`
 
}
 

	
 
encode_string()
 
{
 
	# turn string into UTF-16 and hexdump it
 
	hex_utf16=`rawprint "$1" | iconv -t UTF-16BE | od -t x1 -A n | tr -d -c '[:xdigit:]'`;
 

	
 
	encode_dword `rawprint "$hex_utf16" | wc -m | xargs -I {} expr {} / 2` # length = num hex digits / 2
 
	rawprint "$hex_utf16" | sed 's/../\\x&/g' # put '\x' prefix before every pair of digits
 
}
 

	
 
encode_single_define()
 
{
 
	encode_string `rawprint "$1" | grep -o '^[^=]*'` # everything before '='
 
	rawprint '\x00\x00\x00\n\x00'
 
	encode_string `rawprint "$1" | sed 's/^[^=]*=\?//'` # everything after '='
 
}
 

	
 
# $1 - newline-separated list of defines
 
encode_defines()
 
{
 
	# add some fixed defines and discard empty lines from the tail
 
	defines=`printf 'va_list\nva_args\n%s' "$1"`
 

	
 
	# count lines (no newline at the end so add one)
 
	encode_dword `printf '%s\n' "$defines" | wc -l`
 

	
 
	while [ -n "$defines" ]; do
 
		encode_single_define `rawprint "$defines" | head -n 1`
 
		defines=`rawprint "$defines" | tail -n +2`
 
	done
 
}
 

	
 
encode_includes()
 
{
 
	encode_dword 3 # number of custom includes
 
	encode_string "$1/src/stdafx.h"
 
	encode_string "$1/objs/lang"
 
	encode_string "$1/objs/setting"
 
}
 

	
 
# escape with a backslash (\) characters special to the sed replace string: \ &
 
# also escape our custom filed separator that we will be using in sed: @
 
escape_sed_special()
 
{
 
	sed -e 's/[\&@]/\\&/g'
 
}
 

	
 

	
 

	
 
PROJECT_DIR=`pwd`
 
DIR_NAME=`pwd | xargs -0 basename`
 

	
 
USAGE_TEXT='Usage:
 

	
 
	projects/gen-kdev4 [PROJECT_NAME|-h|--help]
 

	
 
PROJECT_NAME is the name of the project that will be displayed in KDevelop.
 
Before executing, cd into OpenTTD folder and run ./configure script.
 

	
 
-h, --help
 
	print help and exit'
 

	
 
case "$# $1" in
 
	'1 -h' | '1 --help') printf 'Generate OpenTTD project files for KDevelop 4+\n\n%s\n' "$USAGE_TEXT"; exit 0;;
 
	1*)                  PROJECT_NAME="$1";;
 
	0*)                  PROJECT_NAME="$DIR_NAME";;
 
	*)                   printf 'Wrong arguments given. %s\n' "$USAGE_TEXT" >&2; exit 1;;
 
esac
 

	
 
CFLAGS=`grep '^using CFLAGS\.\.\.' config.log 2>/dev/null`
 
if [ -z "$CFLAGS" ]; then
 
	echo "OpenTTD config.log not found" >&2
 
	echo "cd into OpenTTD first and run 'configure'" >&2
 
	exit 1
 
fi
 
DEFINES=`eval "printf '%s\n' $CFLAGS" | grep '^\-D' | cut -c3-`
 

	
 
PROJECT_NAME_SED=s@!!PROJECT_NAME!!@`rawprint "$PROJECT_NAME" | escape_sed_special`@g
 
PROJECT_DIR_SED=s@!!PROJECT_DIR!!@`rawprint "$PROJECT_DIR" | escape_sed_special`@g
 
CUSTOM_DEFINES_SED=s@!!CUSTOM_DEFINES!!@`encode_defines "$DEFINES" | escape_sed_special`@g
 
CUSTOM_INCLUDES_SED=s@!!CUSTOM_INCLUDES!!@`encode_includes "$PROJECT_DIR" | escape_sed_special`@g
 

	
 
mkdir -p .kdev4
 

	
 
sed -e "$PROJECT_NAME_SED" \
 
	>"$PROJECT_DIR/$DIR_NAME.kdev4" \
 
	<< "EOF"
 
[Project]
 
Manager=KDevCustomMakeManager
 
Name=!!PROJECT_NAME!!
 
EOF
 

	
 
sed -e "$PROJECT_DIR_SED" -e "$CUSTOM_DEFINES_SED" -e "$CUSTOM_INCLUDES_SED" \
 
	>"$PROJECT_DIR/.kdev4/$DIR_NAME.kdev4" \
 
	<< "EOF"
 
[CustomDefinesAndIncludes][ProjectPath0]
 
Defines=!!CUSTOM_DEFINES!!
 
Includes=!!CUSTOM_INCLUDES!!
 
Path=.
 

	
 
[Defines And Includes][Compiler]
 
Name=GCC
 
Path=gcc
 
Type=GCC
 

	
 
[Filters]
 
size=10
 

	
 
[Filters][0]
 
inclusive=0
 
pattern=.*
 
targets=3
 

	
 
[Filters][1]
 
inclusive=0
 
pattern=.svn
 
targets=2
 

	
 
[Filters][2]
 
inclusive=0
 
pattern=.hg
 
targets=2
 

	
 
[Filters][3]
 
inclusive=0
 
pattern=.git
 
targets=2
 

	
 
[Filters][4]
 
inclusive=0
 
pattern=*.rej
 
targets=1
 

	
 
[Filters][5]
 
inclusive=0
 
pattern=*.orig
 
targets=1
 

	
 
[Filters][6]
 
inclusive=0
 
pattern=*~
 
targets=1
 

	
 
[Filters][7]
 
inclusive=0
 
pattern=.*.kate-swp
 
targets=1
 

	
 
[Filters][8]
 
inclusive=0
 
pattern=.*.swp
 
targets=1
 

	
 
[Filters][9]
 
inclusive=0
 
pattern=/objs
 
targets=2
 

	
 
[Launch]
 
Launch Configurations=Launch Configuration 0
 

	
 
[Launch][Launch Configuration 0]
 
Configured Launch Modes=execute
 
Configured Launchers=nativeAppLauncher
 
Name=Launch OpenTTD\s
 
Type=Native Application
 

	
 
[Launch][Launch Configuration 0][Data]
 
Arguments=-d 1
 
Dependencies=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x00)
 
Dependency Action=Nothing
 
EnvironmentGroup=
 
Executable=file://!!PROJECT_DIR!!/bin/openttd
 
External Terminal=konsole --noclose --workdir %workdir -e %exe
 
Project Target=
 
Use External Terminal=false
 
Working Directory=file://!!PROJECT_DIR!!/bin
 
isExecutable=true
 
EOF
0 comments (0 inline, 0 general)