diff options
author | pierre <pierre@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2011-12-12 16:48:37 +0000 |
---|---|---|
committer | pierre <pierre@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2011-12-12 16:48:37 +0000 |
commit | 5c10b08baf74a215b80e3a6c9b15e3eb8340a36c (patch) | |
tree | 91640f2f9806bffbf6834a060b7c48fd75b747ae /packages/gdbint | |
parent | 5897252c7a75f5a3cc58cc4b21701845743de383 (diff) | |
download | fpc-5c10b08baf74a215b80e3a6c9b15e3eb8340a36c.tar.gz |
Try to improve script
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@19832 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/gdbint')
-rwxr-xr-x | packages/gdbint/gen-gdblib-inc.sh | 88 |
1 files changed, 75 insertions, 13 deletions
diff --git a/packages/gdbint/gen-gdblib-inc.sh b/packages/gdbint/gen-gdblib-inc.sh index 243f4ab536..6391e3a516 100755 --- a/packages/gdbint/gen-gdblib-inc.sh +++ b/packages/gdbint/gen-gdblib-inc.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash - -if [ "$1" == "--help" ]; then +usage () +{ echo "Script used to easily create collection of libraries needed" echo "to generate a Free Pascal IDE with debugger support." echo "Usage: Copy this script to the directory where you just compile" @@ -11,14 +11,35 @@ if [ "$1" == "--help" ]; then echo "with a single parameter specifying to which directory the libraries" echo "should be copied." echo "Possible parameters for this script:" + echo "--forcestatic, to convert all -lname into $LINKLIB libname.a" echo "implicitlibs=\"space separated list if system librairies used\"" +} + + +if [ "$1" == "--help" ]; then + usage + exit +fi +if [ "$1" == "--forcestatic" ]; then + echo "Using only static libraries in gdblib.inc" + forcestatic=1 + shift +else + forcestatic=0 fi if [ "${1#implicitlibs=}" != "$1" ]; then implicitlibs=${1#implicitlibs=} echo "Also adding implicit libs \"$implicitlibs\"" + shift +fi + +if [ "$1" != "" ]; then + echo "Unrecognized option \"$1\"" + usage fi + if [ "${PATHEXT}" != "" ]; then EXEEXT=.exe if [ "${DJDIR}" != "" ]; then @@ -31,6 +52,11 @@ else libdir=/lib fi +if [ "$OSTYPE" == "msys" ]; then + echo "MSYS system detected" + in_msys=1 +fi + echo "Deleting gdb${EXEEXT} to force recompile" rm -f gdb${EXEEXT} echo "Rebuilding gdb${EXEEXT}" @@ -77,7 +103,29 @@ gcccompiler=`sed -n "s:\([A-Za-z0-9_-]*gcc\) .*:\1:p" comp-cmd.log` if [ "$gcccompiler" != "" ]; then gcclibs=`$gcccompiler -print-search-dirs | sed -n "s#.*libraries: =\(.*\)#\1#p" ` if [ "$gcclibs" != "" ]; then - libdir=${gcclibs//:/ } + if [ $in_msys -eq 1 ]; then + # If we are on msys, gcc is mingw, so that it uses c:/dir + # while find is an msys utility that needs /c/dir path + # we do this conversion below + for let in a b c d e f g h i j k l m n o p q r s t u v w x y z; do + gcclibs=${gcclibs//$let:/\/$let} + done + for let in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; do + gcclibs=${gcclibs//$let:/\/$let} + done + libdir=${gcclibs//;/ } + else + # if ; is present in gcclibs,assume this is the separator instead of : + if [ "${gcclibs//;/ }" != "${gcclibs}" ]; then + if [ "${gcclibs// /_}" != "${gccclibs}" ]; then + # list also contains spaces, convert ' ' into '\ ' + gcclibs=${gcclibs// /\\ } + fi + libdir=${gcclibs//;/ } + else + libdir=${gcclibs//:/ } + fi + fi echo "gcc libs are \"$libdir\"" fi fi @@ -102,7 +150,7 @@ BEGIN { print " exit" print "fi" print "# Copy gdblib.inc file" - print "cp gdblib.inc ${destdir}" + print "cp -p gdblib.inc ${destdir}" } { @@ -110,19 +158,21 @@ BEGIN { for (i=1; i<=nb; i++) { if ( list[i] ~ /lib[^ ]*\.a/ ) { + print "# Looking for static libs" staticlib = gensub (/([^ ]*)(lib[^ ]*\.a)/,"\\1\\2 ","g",list[i]); - print "cp " staticlib " ${destdir}"; + print "cp -p " staticlib " ${destdir}"; } if ( list[i] ~ /lib[^ ]*\.so/ ) { dynamiclib = gensub (/([^ ]*)(lib[^ ]*\.so)/,"\\1\\2 ","g",list[i]); print "echo " dynamiclib " found"; } if ( list[i] ~ /-l/ ) { + print "#Looking for shared libs" systemlib = gensub (/-l([^ ]*)/,"lib\\1.a ","g",list[i]); - print "systemlib=`find " libdir " -name " systemlib " 2> /dev/null `" ; + print "systemlib=`find " libdir " -name " systemlib " -print -quit 2> /dev/null `" ; print "if [ \"${systemlib}\" != \"\" ]; then"; print " echo System lib found: ${systemlib}"; - print " cp ${systemlib} ${destdir}"; + print " cp -p ${systemlib} ${destdir}"; print "else"; print " echo Library " systemlib " not found, shared library assumed"; print "fi"; @@ -134,10 +184,10 @@ END { for (i=1;i<=nb; i++) { systemlib = "lib" list[i] ".a"; print "echo Adding system library " systemlib; - print "systemlib=`find " libdir " -name " systemlib " 2> /dev/null `" ; + print "systemlib=`find " libdir " -name " systemlib " -print -quit 2> /dev/null `" ; print "if [ \"${systemlib}\" != \"\" ]; then"; print " echo System lib found: ${systemlib}"; - print " cp ${systemlib} ${destdir}"; + print " cp -p ${systemlib} ${destdir}"; print "else"; print " echo Library " systemlib " not found, shared library assumed"; print "fi"; @@ -150,7 +200,7 @@ chmod u+x ./copy-libs.sh echo Creating ./gdblib.inc file # Generate gdblib.inc file cat comp-cmd.log |gawk -v gdbcvs=${gdbcvs} -v implibs="${implicitlibs}" \ - -v gdbversion=${gdbversion} ' + -v gdbversion=${gdbversion} -v forcestatic=${forcestatic} ' BEGIN { use_mingw=0; print "{ libgdb.inc file generated by awk script }" @@ -182,15 +232,27 @@ BEGIN { print librarypath; } if ( list[i] ~ /-l/ ) { - systemlib = gensub (/-l([^ ]*)/,"{$LINKLIB \\1} { with -l gcc option}","g",list[i]); - print systemlib; + systemlib = gensub (/-l([^ ]*)/,"\\1","g",list[i]); + if (forcestatic == 1) { + systemlib="lib" systemlib ".a" + } + print "{$LINKLIB " systemlib "} { with -l gcc option}"; } } } END { nb = split (implibs,list); for (i=1;i<=nb; i++) { - print "{$LINKLIB " list[i] "} { implicit library } " + if ( list[i] ~ /lib.*\.a/ ) { + lib=list[i]; + } else { + if ( forcestatic == 1 ) { + lib="lib" list[i] ".a"; + } else { + lib=list[i]; + } + } + print "{$LINKLIB " lib "} { implicit library } " } print "{$endif COMPILING_GDBINT_UNIT }" print "{$undef NotImplemented}" |