forked from JGRennison/OpenTTD-patches
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
(svn r27897) -Add [FS#6577]: Project file generator for kdevelop 4/5 …
…(adf88)
- Loading branch information
Showing
3 changed files
with
209 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,203 @@ | ||
#!/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 |