13. Run script

Start data section to bin/flx.bat[1 /1 ]
     1: @echo off
     2: SETLOCAL
     3: SET RUNIT=1
     4: SET DOFLXG=1
     5: SET DOECHO=0
     6: SET FID=%FLX_INSTALL_DIR%
     7: SET STATIC=0
     8: 
     9: :DOARGS
    10: IF "-c" EQU "%1" (
    11: SET RUNIT=0
    12: SHIFT
    13: GOTO DOARGS
    14: )
    15: 
    16: IF "--nofelix" EQU "%1" (
    17: SET DOFLXG=0
    18: SHIFT
    19: GOTO DOARGS
    20: )
    21: 
    22: IF "--echo" EQU "%1" (
    23: echo on
    24: SET DOECHO=1
    25: SHIFT
    26: GOTO DOARGS
    27: )
    28: 
    29: IF "--test" EQU "%1" (
    30: SET FID=.
    31: SHIFT
    32: GOTO DOARGS
    33: )
    34: 
    35: IF "--static" EQU "%1" (
    36: SET STATIC=1
    37: SHIFT
    38: GOTO DOARGS
    39: )
    40: 
    41: "%FID%\BIN\FLXG" -I"%FID%\LIB" %1 >"%1.LOG"
    42: if ERRORLEVEL 1 GOTO ERROR
    43: if %STATIC% EQU 0 (
    44: %FID%\BIN\FLX_PKGCONFIG --path:%FID%\CONFIG --field:cflags @%1.resh >%1_cflags.txt
    45: if ERRORLEVEL 1 GOTO ERROR
    46: cl /nologo /MD /c /EHs /w  /I"%FID%\RTL" @%1_cflags.txt %1.cpp /Fo%1.obj >"%1.LOG"
    47: if ERRORLEVEL 1 GOTO ERROR
    48: %FID%\BIN\FLX_PKGCONFIG --path:%FID%\CONFIG --field:provides_dlib --field:requires_dlibs @%1.resh >%1_linkflags.txt
    49: if ERRORLEVEL 1 GOTO ERROR
    50: link /dll %1.obj /OUT:%1.dll @%1_linkflags.txt /LIBPATH:"%FID%\BIN" /DEFAULTLIB:libflx_dynamic >"%1.LOG"
    51: if ERRORLEVEL 1 GOTO ERROR
    52: del %1.exp
    53: del %1.lib
    54: del %1_cflags.txt
    55: del %1_linkflags.txt
    56: IF %RUNIT% EQU 1 (
    57: "%FID%\bin\flx_arun" %1.dll %2 %3 %4 %5 %6 %7 %8 %9
    58: )
    59: ) else (
    60: %FID%\BIN\FLX_PKGCONFIG --path:%FID%\CONFIG --field:cflags @%1.resh >%1_cflags.txt
    61: if ERRORLEVEL 1 GOTO ERROR
    62: cl /nologo /MT /c /EHs /w  /I"%FID%\RTL" /DFLX_STATIC_LINK @%1_cflags.txt %1.cpp /Fo%1.obj >"%1.LOG"
    63: if ERRORLEVEL 1 GOTO ERROR
    64: %FID%\BIN\FLX_PKGCONFIG --path:%FID%\CONFIG --field:provides_slib --field:requires_slibs @%1.resh >%1_linkflags.txt
    65: link "%FID%\rtl\flx_arun_static.obj" %1.obj /OUT:%1.exe @%1_linkflags.txt /LIBPATH:"%FID%\RTL" /DEFAULTLIB:libflx_async_static /DEFAULTLIB:libfaio_static /DEFAULTLIB:libdemux_static /DEFAULTLIB:libflx_pthread_static /DEFAULTLIB:libflx_static >"%1.LOG"
    66: if ERRORLEVEL 1 GOTO ERROR
    67: del %1_cflags.txt
    68: del %1_linkflags.txt
    69: %1 %2 %3 %4 %5 %6 %7 %8 %9
    70: )
    71: GOTO FINISHED
    72: :ERROR
    73: ECHO SOME KIND OF ERROR OCCURED, rerun with --echo
    74: type %1.LOG
    75: EXIT /B 1
    76: :FINISHED
    77: ENDLOCAL
    78: 
End data section to bin/flx.bat[1]
Start data section to bin/flx[1 /1 ]
     1: #!/usr/bin/env bash
     2: # flx - felix script harness
     3: INSTALL_ROOT=/usr/lib/felix/felix-1.1.3_rc4/lib/felix/felix-1.1.3_rc4
     4: FLX_INSTALL_DIR=${FLX_INSTALL_DIR:-$INSTALL_ROOT}
     5: CYGWIN=0
     6: WIN32=0
     7: MACOSX=0
     8: HAVE_GNU=1
     9: HAVE_MSVC=0
    10: CCOBJ_DLLIB="g++ -fPIC -c -Wall -Wno-invalid-offsetof -Wfatal-errors "
    11: CCLINK_DLLIB="g++ -shared "
    12: CCOBJ_STATIC_LIB="g++ -c -Wall -Wno-invalid-offsetof -Wfatal-errors "
    13: CCLINK_STATIC="g++ "
    14: VERSION="1.1.3_rc4"
    15: EXT_LIB=".a"
    16: EXT_STATIC_OBJ="_static.o"
    17: EXT_SHARED_OBJ="_dynamic.o"
    18: EXT_EXE=""
    19: EXT_SHLIB=".so"
    20: SPEC_OBJ_FILENAME="-o "
    21: SPEC_EXE_FILENAME="-o "
    22: OPTIMISE="-O3 -fomit-frame-pointer --inline "
    23: DEBUG_FLAGS="-g "
    24: PTHREAD_SWITCH="-lpthread "
    25: # check for test mode: this argument must come first
    26: 
    27: TESTMODE=0
    28: RECOMPILE=0
    29: DEBUG=0
    30: INLINE=10
    31: ECHO=0
    32: TIME=0
    33: STATIC=0
    34: RUNIT=1
    35: CCFLAGS=""
    36: FELIX=1
    37: LINKER_SWITCHES=""
    38: MACROS=""
    39: grab=1
    40: cpps=""
    41: cppos=""
    42: INCLUDE_DIRS=""
    43: 
    44: while (( "$grab" == "1" ));
    45: do
    46:   case x$1 in
    47:   x--test=*)
    48:     TESTMODE=1
    49:     FLX_INSTALL_DIR=${1:7}
    50:     shift
    51:   ;;
    52: 
    53:   x--test)
    54:     TESTMODE=1
    55:     FLX_INSTALL_DIR=.
    56:     shift
    57:   ;;
    58: 
    59:   x--force)
    60:     RECOMPILE=1
    61:     shift
    62:   ;;
    63: 
    64:   x--debug)
    65:     DEBUG=1
    66:     ECHO=1
    67:     shift
    68:   ;;
    69: 
    70:   x--time)
    71:     TIME=1
    72:     shift
    73:   ;;
    74: 
    75:   x--echo)
    76:     ECHO=1
    77:     shift
    78:   ;;
    79: 
    80:   x--static)
    81:     STATIC=1
    82:     shift
    83:   ;;
    84: 
    85:   x--inline=*)
    86:     INLINE=${1:9}
    87:     shift
    88:   ;;
    89: 
    90:   x--inline)
    91:     INLINE=50
    92:     shift
    93:   ;;
    94: 
    95:   x--noinline)
    96:     INLINE=0
    97:     shift
    98:   ;;
    99: 
   100:   x--opt=1)
   101:     INLINE=10
   102:     CCFLAGS="-O1 $CCFLAGS"
   103:     shift
   104:   ;;
   105: 
   106:   x--opt=2)
   107:     INLINE=20
   108:     CCFLAGS="$CCFLAGS$OPTIMISE"
   109:     shift
   110:   ;;
   111: 
   112:   x--opt=3)
   113:     INLINE=50
   114:     CCFLAGS="$CCFLAGS$OPTIMISE"
   115:     shift
   116:   ;;
   117: 
   118:   x--optimise)
   119:     INLINE=10
   120:     CCFLAGS="$CCFLAGS$OPTIMISE"
   121:     shift
   122:   ;;
   123: 
   124:   x--optimize)
   125:     INLINE=10
   126:     CCFLAGS="$CCFLAGS$OPTIMISE"
   127:     shift
   128:   ;;
   129: 
   130:   x--version)
   131:     echo $VERSION
   132:     exit 0
   133:   ;;
   134: 
   135:   x--help)
   136:     man flx
   137:     exit 0
   138:   ;;
   139: 
   140:   x-c)
   141:     RUNIT=0
   142:     shift
   143:   ;;
   144: 
   145:   x-I*)
   146:     INCLUDE_DIRS="$INCLUDE_DIRS $1"
   147:     shift
   148:   ;;
   149: 
   150:   x--nofelix)
   151:     FELIX=0
   152:     shift
   153:   ;;
   154: 
   155:   x-[lL]*)
   156:    LINKER_SWITCHES="$LINKER_SWITCHES $1"
   157:    shift
   158:   ;;
   159: 
   160:   x-D*)
   161:    MACROS="$MACROS $1"
   162:    shift
   163:   ;;
   164: 
   165:   x*.cpp)
   166:     cpps="$cpps $1"
   167:     cppos="$cppos `dirname $1`/`basename $1 .cpp`$EXT_OBJ"
   168:     shift
   169:   ;;
   170: 
   171:   x*.cxx)
   172:     cpps="$cpps $1"
   173:     cppos="$cppos `dirname $1`/`basename $1 .cxx`$EXT_OBJ"
   174:     shift
   175:   ;;
   176: 
   177:   x*.c)
   178:     cpps="$cpps $1"
   179:     cppos="$cppos `dirname $1`/`basename $1 .c`$EXT_OBJ"
   180:     shift
   181:   ;;
   182: 
   183:   x*.o)
   184:     cppos="$cppos `dirname $1`/`basename $1 .o`$EXT_OBJ"
   185:     shift
   186:   ;;
   187: 
   188:   x*.obj)
   189:     cppos="$cppos `dirname $1`/`basename $1 .obj`$EXT_OBJ"
   190:     shift
   191:   ;;
   192: 
   193:   x*.a)
   194:     cppos="$cppos $1"
   195:     shift
   196:   ;;
   197: 
   198:   x*.lib)
   199:     cppos="$cppos $1"
   200:     shift
   201:   ;;
   202: 
   203:   x--pkg=*)
   204:     pkgs=" `echo \"$1\" | sed 's/--pkg=\(.*\)/\\1/'`"
   205:     shift
   206:   ;;
   207: 
   208: # unknown flag .. pass to both compile and link
   209:    x-*)
   210:       cpps="$cpps $1"
   211:       cppos="$cppos $1"
   212:       shift
   213:     ;;
   214: 
   215: # the main filename -- subsequent args are args to flx_run
   216:   x*)
   217:     grab=0
   218:   ;;
   219: 
   220:   esac
   221: done
   222: 
   223: DLINK_STRING="-L${FLX_INSTALL_DIR}/rtl "
   224: SLINK_STRING="-L${FLX_INSTALL_DIR}/rtl "
   225: PKGCONFIG=$FLX_INSTALL_DIR/bin/flx_pkgconfig
   226: 
   227: if [ "$ECHO" = "1" ]
   228: then
   229:   echo "#FLX_INSTALL_DIR=$FLX_INSTALL_DIR"
   230:   echo "#PKGCONFIG=$PKGCONFIG"
   231: fi
   232: 
   233: 
   234: # find external header files
   235: PKGCONFIG_CFLAGS="$PKGCONFIG --path+=$FLX_INSTALL_DIR/config --field=cflags "
   236: 
   237: # find external dynload libraries
   238: PKGCONFIG_DLIBS="$PKGCONFIG -r --path+=$FLX_INSTALL_DIR/config --field=provides_dlib --field=requires_dlibs "
   239: 
   240: # find external static libraries
   241: PKGCONFIG_SLIBS="$PKGCONFIG -r --keeprightmost --path+=$FLX_INSTALL_DIR/config --field=provides_slib --field=requires_slibs "
   242: 
   243: #find driver package required
   244: PKGCONFIG_DRIVER="$PKGCONFIG --path+=$FLX_INSTALL_DIR/config --field=flx_requires_driver "
   245: 
   246: # make a list of any *.cpp files (or other g++ options ..)
   247: 
   248: if [ $STATIC = 0 ]
   249: then
   250:   EXT_OBJ=$EXT_SHARED_OBJ
   251: else
   252:   EXT_OBJ=$EXT_STATIC_OBJ
   253: fi
   254: 
   255: if [ "x$1" = "x" ]
   256: then
   257:   echo "usage: flx [options] filename"
   258:   exit 1
   259: fi
   260: 
   261: # Strip trailing .flx or .so
   262: # users should type 'flx file' without extension,
   263: # but #! interpreter always passes extension ..
   264: 
   265: case "$1" in
   266:   *.flx)
   267:     arg="`echo $1 | sed 's/\.flx$//'`"
   268:     is_flx=1
   269:   ;;
   270: 
   271:   *.so)
   272:     arg="`echo $1 | sed 's/\.so$//'`"
   273:     is_so=1
   274:   ;;
   275: 
   276:   *)
   277:     arg="$1"
   278: esac
   279: 
   280: # Find absolute pathname
   281: 
   282: base=$arg
   283: 
   284: if [ "x$base" = "x" ]
   285: then
   286:   echo "No such felix program: $arg" >&2
   287:   exit 1
   288: fi
   289: 
   290: shift
   291: 
   292: function calpackages () {
   293:   # find all include directories
   294:   if [ "$ECHO" = "1" ]
   295:   then
   296:     echo "$PKGCONFIG_CFLAGS @$base.resh"
   297:   fi
   298: 
   299:   INCLUDE_DIRS="$INCLUDE_DIRS $($(echo $PKGCONFIG_CFLAGS @$base.resh))"
   300: 
   301:   if [ "$ECHO" = "1" ]
   302:   then
   303:     echo "$PKGCONFIG_DRIVER @$base.resh"
   304:   fi
   305: 
   306:   # find the driver package
   307:   DRIVER_PKG=$($(echo $PKGCONFIG_DRIVER @$base.resh))
   308:   if [ x$DRIVER_PKG = x ]
   309:   then
   310:     # default to flx_run if none specified
   311:     DRIVER_PKG=flx_run
   312:   fi
   313: 
   314:   # find the driver entity
   315:   if [ $STATIC = 0 ]
   316:   then
   317:     # dynamic linkage: the driver executable
   318:     DRIVER=$FLX_INSTALL_DIR/bin/$DRIVER_PKG$EXT_EXE
   319:   else
   320:     # static linkage: the driver object file
   321:     DRIVER=$FLX_INSTALL_DIR/rtl/$DRIVER_PKG$EXT_STATIC_OBJ
   322:   fi
   323: 
   324:   if [ $STATIC = 0 ]
   325:   then
   326:     if [ "$ECHO" = "1" ]
   327:     then
   328:      echo "$PKGCONFIG_DLIBS @$base.resh"
   329:     fi
   330: 
   331:     # dynamic linkage: all the libraries required by the application
   332:     LINK_STRING="$DLINK_STRING$LINKER_SWITCHES $($(echo $PKGCONFIG_DLIBS @$base.resh))"
   333:   else
   334:     if [ "$ECHO" = "1" ]
   335:     then
   336:      echo "$PKGCONFIG_SLIBS $DRIVER_PKG @$base.resh"
   337:     fi
   338: 
   339:     # static linkage: all the libraries required by the application and driver
   340:     LINK_STRING="$SLINK_STRING$LINKER_SWITCHES $($(echo $PKGCONFIG_SLIBS $DRIVER_PKG @$base.resh))"
   341:   fi
   342: 
   343:   if [ $ECHO = 1 ]
   344:   then
   345:     echo "#RESOURCE FILE=$base.resh"
   346:     echo "#INCLUDE_DIRS=$INCLUDE_DIRS"
   347:     echo "#DRIVER=$DRIVER"
   348:     echo "#LINK_STRING=$LINK_STRING"
   349:   fi
   350: 
   351: }
   352: 
   353: # grab arguments
   354: grab=1
   355: args=""
   356: while (( "$grab" == "1" ));
   357: do
   358:   case "x$1" in
   359:     x)
   360:       grab=0
   361:     ;;
   362: 
   363:     x*)
   364:       args="$args $1"
   365:       shift
   366:     ;;
   367:  esac
   368: done
   369: 
   370: INCLUDE_DIR="-I$FLX_INSTALL_DIR/rtl"
   371: FLXLIB="-I$FLX_INSTALL_DIR/lib"
   372: if [ "$CYGWIN" = "1" -o "$WIN32" = "1" ]
   373: then
   374:   # bash is a heap of crap! The escaped quotes here are
   375:   # required in case the PATH has a filename with spaces
   376:   # However this actually fails on Linux!
   377:   FLXG="env \"PATH=$FLX_INSTALL_DIR/bin:\$PATH\" $FLX_INSTALL_DIR/bin/flxg"
   378:   FLXRUN="env \"PATH=$FLX_INSTALL_DIR/bin:\$PATH\" "
   379: else
   380:   FLXG="env PATH=$FLX_INSTALL_DIR/bin:\$PATH $FLX_INSTALL_DIR/bin/flxg"
   381:   # the mac uses DYLD_LIBRARY_PATH instead of LD_LIBRARY_PATH
   382:   if [ "$MACOSX" = "1" ]
   383:   then
   384:     FLXRUN="env DYLD_LIBRARY_PATH=$FLX_INSTALL_DIR/rtl:\$DYLD_LIBRARY_PATH "
   385:   else
   386:     FLXRUN="env LD_LIBRARY_PATH=$FLX_INSTALL_DIR/rtl:\$LD_LIBRARY_PATH "
   387:   fi
   388: fi
   389: ELKHOUND="--elkhound=$FLX_INSTALL_DIR/bin/flx_elkhound"
   390: 
   391: DEBUGSWITCH=""
   392: if [ "$DEBUG" = "1" ]; then DEBUGSWITCH=" --debug"; fi
   393: STATIC_ENV=""
   394: if [ "$DEBUG" = "1" ]; then STATIC_ENV="env FLX_DEBUG=1 "; fi
   395: 
   396: # No need to compile, just run it
   397: if [ $STATIC = 0 ]
   398: then
   399:   if [ $RECOMPILE = 0 -a -r "$base$EXT_SHLIB" -a "(" ! -r "$base.flx" -o "$base$EXT_SHLIB" -nt "$base.flx" ")" ]
   400:   then
   401:     if [ $RUNIT = 1 ]
   402:     then
   403:       calpackages
   404:       cmd="$FLXRUN$DRIVER$DEBUGSWITCH $base$EXT_SHLIB $args"
   405:       if [ $ECHO = 1 ]; then echo $cmd; fi
   406:       eval $cmd
   407:       exit $?
   408:     fi
   409:   fi
   410: else
   411:   if [ $RECOMPILE = 0 -a -r "$base$EXT_EXE" -a "(" ! -r "$base.flx" -o "$base$EXT_EXE" -nt "$base.flx" ")" ]
   412:   then
   413:     if [ $RUNIT = 1 ]
   414:     then
   415:       cmd="$STATIC_ENV $base $args"
   416:       if [ $ECHO = 1 ]; then echo $cmd; fi
   417:       eval $cmd
   418:       exit $?
   419:     fi
   420:   fi
   421: fi
   422: 
   423: # Need Felix and c++ compile, then run it
   424: 
   425: if [ $DEBUG = 1 ]
   426: then
   427:   VERBOSE="-v"
   428:   CCFLAGS="$CCFLAGS$DEBUG_FLAGS"
   429: else
   430:   VERBOSE="-q"
   431: fi
   432: 
   433: FLXFLAGS="--inline=$INLINE"
   434: 
   435: if [ $STATIC = 0 ]
   436: then
   437:   if [ $FELIX = 1 ]
   438:   then
   439:     FCMD="$FLXG $VERBOSE $FLXFLAGS $ELKHOUND $FLXLIB $INCLUDE_DIRS $base"
   440:     if [ $ECHO = 1 ]; then echo "$FCMD"; fi
   441:     eval $FCMD
   442:   fi
   443:   if [ $? = 0 ]
   444:   then
   445:     calpackages
   446:     CCMD="$CCOBJ_DLLIB $CCFLAGS -DTARGET_BUILD $INCLUDE_DIR $INCLUDE_DIRS $MACROS $cpps $base.cpp $SPEC_OBJ_FILENAME$base$EXT_OBJ"
   447:     LCMD="$CCLINK_DLLIB $CCFLAGS $cppos $base$EXT_OBJ $SPEC_EXE_FILENAME$base$EXT_SHLIB $LINK_STRING "
   448:     if [ $ECHO = 1 ]; then echo "$CCMD"; fi
   449:     if `echo $CCMD`
   450:     then
   451:       if [ $ECHO = 1 ]; then echo "$LCMD"; fi
   452:       if `echo $LCMD`
   453:       then
   454:         if [ $RUNIT = 1 ]
   455:         then
   456:           if [ $TIME = 1 ]
   457:           then
   458:             cmd="time $FLXRUN$DRIVER$DEBUGSWITCH $base$EXT_SHLIB $args"
   459:           else
   460:             cmd="$FLXRUN$DRIVER$DEBUGSWITCH $base$EXT_SHLIB $args"
   461:           fi
   462:           if [ $ECHO = 1 ]; then echo $cmd; fi
   463:           eval $cmd
   464:         fi
   465:       fi
   466:     fi
   467:   fi
   468: else
   469:   if [ $FELIX = 1 ]
   470:   then
   471:     FCMD="$FLXG $VERBOSE $FLXFLAGS $ELKHOUND $FLXLIB $INCLUDE_DIRS $base"
   472:     if [ $ECHO = 1 ]; then echo "$FCMD"; fi
   473:     eval $FCMD
   474:   fi
   475:   if [ $? = 0 ]
   476:   then
   477:     calpackages
   478:     CCMD="$CCOBJ_STATIC_LIB $CCFLAGS -DTARGET_BUILD -DFLX_STATIC_LINK $INCLUDE_DIR $INCLUDE_DIRS $MACROS $cpps $base.cpp $SPEC_OBJ_FILENAME$base$EXT_OBJ"
   479:     LCMD="$CCLINK_STATIC $SPEC_EXE_FILENAME$base$EXT_EXE $base$EXT_OBJ ${DRIVER} $cppos $LINK_STRING"
   480:     if [ $ECHO = 1 ]; then echo "$CCMD"; fi
   481:     if `echo $CCMD`
   482:     then
   483:       if [ $ECHO = 1 ]; then echo "$LCMD"; fi
   484:       if `echo $LCMD`
   485:       then
   486:         # rm -f "$base.cpp"
   487:         if [ $RUNIT = 1 ]
   488:         then
   489:           if [ $TIME = 1 ]
   490:           then
   491:             cmd="time $STATIC_ENV $base $args"
   492:           else
   493:             cmd="$STATIC_ENV $base $args"
   494:           fi
   495:           if [ $ECHO = 1 ]; then echo $cmd; fi
   496:           eval $cmd
   497:         fi
   498:       fi
   499:     fi
   500:   fi
   501: fi
   502: exit $?
   503: 
End data section to bin/flx[1]