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