Hi Damir,
On Tue, 29 Jan 2002 09:31:42 +0100
Damir Buskulic <buskulic@lapp.in2p3.fr> wrote
concerning "Re: [ROOT] strange pb on cxx6.2":
> Thanks very much Christian for this very extensive answer !
You're welcome.
Ok, some people didn't like my example of
`This File has a bloody long name - so I can use more disk space and spend more $!.doc'
* One pointetd out that you _can_ have long file names on Unix.
Ofcourse you can have long file names in Un*x - that's not the
point. The point is that Windoze users make names like the above,
containing other cahracters than [a-zA-Z0-9_.], more often than Un*x
users does. Why? I don't know. Another point is, that if you want
to use spaces, ladida in a Un*x filename, then you need to escape
those glyphs, or quote the entire filename. That's a good idea,
'cause it forces people to be careful (Un*x making people careful -
that's a new one :-)
* One remembered back 2-3 years ago where everybody was laughing at
the Dos 8.3 filename limitation in Windoze. Well, I thought about
this morning, and I occured to me, that the file above would
probably be named
`THIS~F~1.DOC'
internally, so we're still down to 8.3 filenames - and the head (?)
Borg thought he said goodbye to Mr. Dos - ha! :-) Yeah, I know -
too much /.. Anyway, the point wasn't as much the lenght of the
filenames, but the odd characters in it.
> But you can easily imagine I was not going to name one of my files
> "baaaa#pka.h".
Yeah, I was wondering why you would do that, espacially since `#' is
the comment-begin marker in the shell, and you'd have to escape it.
> In fact, this was done by ACliC automatically. I suppose this is a
> problem with the way temporary file names are generated, hence a
> problem with some libc routine like mktemp or some such.
It seems odd that ACliC (which I never use - see below) should
emit the character `#' in a filename ... hmm. Hope ROOT team will fix
it.
I guess the ANSI C spec has something to say about the possible
characters that can go into the result of tmpnam (which is what I
believe is used - it should really be something like tmpfile or
mkstemp due to security and reantrant-ness).
FYI, here's a BASH shell function that does (almost?) the same as
ACliC:
function root-module () {
if test $# -lt 1 ;then
echo "I need an argument"
return 1
fi
switch ($1)
*.h|*.hh|*.H) echo "I need the implementation file" ; return 2 ;;
*.cxx) name=`basename $1 .cxx` ; ext=.cxx ;;
*.cc) name=`basename $1 .cc` ; ext=.cc ;;
*.C) name=`basename $1 .C` ; ext=.C ;;
*) name=$1 ; ext=.cxx ;;
esac
dir=`dirname $1`
if test "x$dir" = "x" ; then dir="./" ; else dir="${dir}/" ; fi
shift
rootflags="`root-config --cflags --glibs` -Wl,-rpath,`root-config --libdir`"
cflags="-c -Wall -g `root-config --cflag` $* -o"
soflags="-shared -Wl,-soname,${name}.so -Wl,-rpath,`root-config --libdir` $*
obj=`mktemp /tmp/${name}XXXXXX`.o
c++ ${dir}${name}${ext} ${cflags} -o ${obj}
if test $? -gt 0 ; then
echo "Compilation of ${dir}${name}${ext} failed"
return 3
fi
for i in .h .hh .H ; do
if test -f ${dir}${name}.${i} ; then
dict=`mktemp /tmp/${name}XXXXXX`
rootcint -f ${dict}.cxx -c $* ${dir}${name}.${i}
if test $? -gt 0 ; then
echo "Dicitionary generation from ${dir}${name}${i} failed"
return 4
fi
c++ ${dict}.cxx ${cflags} ${dict}.o
if test $? -gt 0 ; then
echo "Compilation of ${dict}.cxx failed"
rm -f {dict}.{cxx,h} ${obj}
return 5
fi
rm -f {dict}.{cxx,h}
dict="${dict}.o"
break
fi
done
c++ ${soflags} ${dir}${name}.so ${dict} ${obj}
if test $? -gt 0 ; then
echo "Linking of ${dir}${name}.so failed"
rm -f {dict} ${obj}
return 6
fi
rm -f ${obj} ${dict}
}
Who needs Perl :-)
Out it in your ~/.profile, and use it like
> ls
Foo.cxx Foo.h
> root-module Foo -I/usr/local/include/bar -DHAVE_BAR
> ls
Foo.cxx Foo.h Foo.so
Yours,
Christian Holm Christensen -------------------------------------------
Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91
DK-2200 Copenhagen N Cell: (+45) 28 82 16 23
Denmark Office: (+45) 353 25 305
Email: cholm@nbi.dk Web: www.nbi.dk/~cholm
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:40 MET