Updating the "usage" as shown in the attached file should make things less confusing.
On 1/22/13 9:17 AM, "Owens, Steve" <[email protected]> wrote: >James, > >After examining the tsxs shell script it is now apparent to me why the >command didn't work. > >This will not work as expected: > >tsxs -o libJsonPTransformationHandler.so -C JsonPTransformationHandler.cc >-I /home/sowens/ApiMgmtPlugin > > >I suspect that this WILL work as expected > >tsxs -I /home/sowens/ApiMgmtPlugin -o libJsonPTransformationHandler.so -C >JsonPTransformationHandler.cc > > >Apparently the command line parsing algorithm used isn't as robust as it >could be. > >The inner loop in the argument parser: > -C) > shift > while [ -r "$1" ]; do > SRC=$1 > obj=`echo $SRC | sed -e 's/\.[a-z]*$/\.lo/g;'` > echo " compiling $SRC -> $obj" > debug "$CXX $CPPFLAGS $CXXFLAGS $PICFLAGS -c $SRC -o $obj" > $CXX $CPPFLAGS $CXXFLAGS $PICFLAGS -c $SRC -o $obj || > bail "Compile failed: $CXX $CPPFLAGS $CXXFLAGS $PICFLAGS -c >$SRC -o $obj" > OBJS="$OBJS $obj" > LD=$MODULELDXX > BUILD=1 > shift > done > ;; > >Seems to be eating arguments after the -C. > > > > >Once I get to a terminal I can try this out from I will follow up with >results. > >Steve Owens > >On 1/19/13 10:03 AM, "James Peach" <[email protected]> wrote: > >>On 18/01/2013, at 12:37 PM, "Owens, Steve" <[email protected]> >>wrote: >> >>> Given that tsxs is broken does anyone know what would be the sequence >>>of commands that it would execute to build the plugin if it were working >>>correctly given the following command line? >>> >>> tsxs -o libJsonPTransformationHandler.so -C >>>JsonPTransformationHandler.cc -I /home/sowens/ApiMgmtPlugin >> >>Here's an example (a bit Mac OS X specific): >> https://github.com/jpeach/spdy/blob/master/Makefile >> >>You really only have to set the include path to $TS_ROOT/include and tell >>the linker to allow undefined symbols if that's necessary. >> >>The -I option to tsxs looks reasonably implemented .. can you put a "set >>-x" at the top of tsxs and post the output somewhere? >> >>> >>> >>> From: "Owens, Steve" <[email protected]> >>> Reply-To: "[email protected]" >>><[email protected]> >>> Date: Fri, 18 Jan 2013 12:19:14 -0800 >>> To: "[email protected]" <[email protected]> >>> Subject: Re: Questions about tsxs >>> >>> Digging into this further I can see that when I invoke: >>> tsxs -o libJsonPTransformationHandler.so -C >>>JsonPTransformationHandler.cc -I /home/sowens/ApiMgmtPlugin >>> >>> Tsxs writes the following on the last line of output: >>> Compile failed: g++ -I/usr/local/include -g -pipe -Wall -Werror -O3 >>>-feliminate-unused-debug-symbols -fno-strict-aliasing >>>-Wno-invalid-offsetof -fpic -c JsonPTransformationHandler.cc -o >>>JsonPTransformationHandler.lo >>> >>> Yet when I do >>> tsxs -h >>> >>> It outputs: >>> /usr/local/bin/tsxs : a tool to compile, link and install trafficserver >>>plugins. >>> >>> compiling/linking: >>> -c [ file1.c [ file2.c [ ... ] ] ] ## compiles C files >>> -C [ file1.cc [ file2.C [ ... ] ] ] ## compiles C++ files >>> -o modulename.so ## the name of the module >>> -I include ## add -Iinclude to the >>>compile >>> -l lib ## add -llib to the link >>> >>> installing: >>> -o modulename.so ## the name of the module >>> -i ## install the object >>> >>> >>> So I am pretty sure there is a bug here since the I >>>/home/sowens/ApiMgmtPlugin didn't make it to the g++ command. >>> >>> >>> From: "Owens, Steve" <[email protected]> >>> Reply-To: "[email protected]" >>><[email protected]> >>> Date: Fri, 18 Jan 2013 12:09:56 -0800 >>> To: "[email protected]" <[email protected]> >>> Subject: Questions about tsxs >>> >>> I am experiencing some confusing behaviors trying to use tsxs and the >>>documentation on this tool does not seem to be very complete. >>> >>> Here is what I am trying to do in a nutshell. >>> >>> I have plugin file that I want to build and I want to be able to >>>include files from a different directory into the header file such that: >>> >>> When I put in my JsonPTransformationHandler.h file >>> #include <events/BaseEventHandler.h> >>> #include <TransactionData.h> >>> >>> >>> And I put this in my JsonPTransformationHandler.cc file: >>> #include "JsonPTransformationHandler.h" >>> #include <ApiMgmtUtil.h> >>> >>> >>> I have tried executing the build tool with the following command lines >>>to no avail: >>> >>> tsxs -o libJsonPTransformationHandler.so -C >>>JsonPTransformationHandler.cc -I/home/sowens/ApiMgmtPlugin >>> tsxs -o libJsonPTransformationHandler.so -C >>>JsonPTransformationHandler.cc -I/home/sowens/ApiMgmtPlugin/ >>> tsxs -o libJsonPTransformationHandler.so -C >>>JsonPTransformationHandler.cc -I /home/sowens/ApiMgmtPlugin >>> tsxs -o libJsonPTransformationHandler.so -C >>>JsonPTransformationHandler.cc -I /home/sowens/ApiMgmtPlugin/ >>> >>> Yet in each and every case when the tool runs it renders the following >>>error messages: >>> JsonPTransformationHandler.h:13:37: error: events/BaseEventHandler.h: >>>No such file or directory >>> JsonPTransformationHandler.h:14:29: error: TransactionData.h: No such >>>file or directory >>> JsonPTransformationHandler.cc:9:25: error: ApiMgmtUtil.h: No such file >>>or directory >>> >>> Yet the following ls commands hold: >>> [sowens@d4mftapp11 JsonPTransformationHandlerPlugin]$ ls -l >>>/home/sowens/ApiMgmtPlugin/TransactionData.h >>> -rw-rw-r-- 1 sowens sowens 7736 Jan 18 11:22 >>>/home/sowens/ApiMgmtPlugin/TransactionData.h >>> [sowens@d4mftapp11 JsonPTransformationHandlerPlugin]$ ls -l >>>/home/sowens/ApiMgmtPlugin/ApiMgmtUtil.h >>> -rw-rw-r-- 1 sowens sowens 20232 Jan 18 11:22 >>>/home/sowens/ApiMgmtPlugin/ApiMgmtUtil.h >>> [sowens@d4mftapp11 JsonPTransformationHandlerPlugin]$ ls -l >>>/home/sowens/ApiMgmtPlugin/events/BaseEventHandler.h >>> -rw-rw-r-- 1 sowens sowens 1970 Jan 18 11:22 >>>/home/sowens/ApiMgmtPlugin/events/BaseEventHandler.h >>> >>> >>> So the files are there but tsxs cannot fine them. Furthermore other >>>than the limited help provided by the h option on tsxs there is no >>>examples in the ATS web documentation that talks about includes. Does >>>tsxs support include directories? >>> >> >
#!/bin/sh # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. host="x86_64-apple-darwin10.8.0" prefix="/usr/local" exec_prefix="${prefix}" INSTALLDIR=`eval echo "${exec_prefix}/libexec/trafficserver"` INCLUDEDIR=`eval echo "${prefix}/include"` CPPFLAGS="$CPPFLAGS -I$INCLUDEDIR" CFLAGS="-g -pipe -Wall -Werror -Wno-deprecated-declarations -O3 -feliminate-unused-debug-symbols -fno-strict-aliasing" CXXFLAGS="-g -pipe -Wall -Werror -Wno-deprecated-declarations -O3 -feliminate-unused-debug-symbols -fno-strict-aliasing -Wno-invalid-offsetof " BUILD= DEBUGECHO= if [ -z "$CC" ]; then CC="gcc" fi if [ -z "$CXX" ]; then CXX="g++" fi debug() { if [ -n "$DEBUGECHO" ]; then echo $* fi } bail() { echo $* exit 1 } case $host in *-*-darwin*) PICFLAGS="-fPIC" MODULELD="$CC -bundle -flat_namespace -undefined suppress" MODULELDXX="$CXX -bundle -flat_namespace -undefined suppress" MODULEEXT=bundle RLDFLAG="-Wl,--rpath=" ;; *-*-solaris*) PICFLAGS="-fpic" if test "x$CC" != "xgcc" ; then CFLAGS="$CFLAGS -mt" PICFLAGS="-Kpic" fi MODULELD="$CC -G" MODULELDXX="$CXX -G" MODULEEXT=so RLDFLAG="-R" WHOLE_ARCHIVE="-Wl,-z -Wl,allextract" NOWHOLE_ARCHIVE="-Wl,-z -Wl,defaultextract" ;; *-*-linux*) LDFLAGS="$LDFLAGS -Wl,-E" CPPFLAGS="$CPPFLAGS" PICFLAGS="-fpic" MODULELD="$CC -shared" MODULELDXX="$CXX -shared" MODULEEXT=so RLDFLAG="-Wl,--rpath=" WHOLE_ARCHIVE="-Wl,--whole-archive" NOWHOLE_ARCHIVE="-Wl,--no-whole-archive" ;; *-*-freebsd*) PICFLAGS="-fpic" MODULELD="$CC -shared" MODULELDXX="$CXX -shared" MODULEEXT=so RLDFLAG="-Wl,--rpath=" ;; *) PICFLAGS="-fpic" MODULELD="$CC -shared" MODULEEXT=so RLDFLAG="-Wl,--rpath=" ;; esac LD=$MODULELD for v in $* do case $v in -v) shift DEBUGECHO=1 ;; -h) cat <<EOF $0 : a tool to compile, link and install trafficserver plugins. compiling/linking: -c [ file1.c [ file2.c [ ... ] ] ] ## compiles C files -C [ file1.cc [ file2.C [ ... ] ] ] ## compiles C++ files -o modulename.so ## the name of the module -I include ## add -Iinclude to the compile -l lib ## add -llib to the link Notes: The -c and the -C option are mutually exclusive. You cannot have both on the same command line. Also note, that the -c and -C options must appear last in the list of options. All arguments following -c or -C will be treated as file names for files to be compiled. installing: -o modulename.so ## the name of the module -i ## install the object EOF exit ;; -I) CPPFLAGS="$CPPFLAGS -I$2" shift 2 ;; -l) LIBS="$LIBS -l$2" shift 2 ;; -c) shift while [ -r "$1" ]; do SRC=$1 obj=`echo $SRC | sed -e 's/\.[a-z]*$/\.lo/g;'` echo " compiling $SRC -> $obj" debug "$CC $CPPFLAGS $CFLAGS $PICFLAGS -c $SRC -o $obj" $CC $CPPFLAGS $CFLAGS $PICFLAGS -c $SRC -o $obj || bail "Compile failed: $CC $CPPFLAGS $CFLAGS $PICFLAGS -c $SRC -o $obj" OBJS="$OBJS $obj" BUILD=1 shift done ;; -C) shift while [ -r "$1" ]; do SRC=$1 obj=`echo $SRC | sed -e 's/\.[a-z]*$/\.lo/g;'` echo " compiling $SRC -> $obj" debug "$CXX $CPPFLAGS $CXXFLAGS $PICFLAGS -c $SRC -o $obj" $CXX $CPPFLAGS $CXXFLAGS $PICFLAGS -c $SRC -o $obj || bail "Compile failed: $CXX $CPPFLAGS $CXXFLAGS $PICFLAGS -c $SRC -o $obj" OBJS="$OBJS $obj" LD=$MODULELDXX BUILD=1 shift done ;; -o) OBJ=$2 shift 2 ;; -i) INSTALL=1 shift ;; esac done if [ "$BUILD" = "1" -a -n "$OBJ" ]; then echo " linking -> $OBJ" debug "$LD $LDFLAGS -o $OBJ $OBJS $LIBS" $LD $LDFLAGS -o $OBJ $OBJS $LIBS || bail "Link failed: $LD $LDFLAGS -o $OBJ $OBJS $LIBS" fi if [ -n "$OBJ" ]; then if [ -r "$OBJ" ]; then if [ "$INSTALL" = "1" ]; then echo " installing $OBJ -> $INSTALLDIR/$OBJ" cp $OBJ $INSTALLDIR/$OBJ chmod 0755 $INSTALLDIR/$OBJ fi else echo "No $OBJ" fi fi
