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

Reply via email to