Diff for /gforth/libcc.fs between versions 1.50 and 1.59

version 1.50, 2008/07/15 16:11:49 version 1.59, 2009/10/03 21:33:48
Line 135 Line 135
 \ : delete-file 2drop 0 ;  \ : delete-file 2drop 0 ;
   
 require struct.fs  require struct.fs
   require mkdir.fs
   
 \ c-function-ft word body:  \ c-function-ft word body:
 struct  struct
Line 218  end-struct list% Line 219  end-struct list%
             node list-next @              node list-next @
     repeat ;      repeat ;
   
 \ linked libraries  2variable c-libs \ library names in a string (without "lib")
   
 list%  : add-lib ( c-addr u -- ) \ gforth
     cell% 2* field c-lib-string  
 end-struct c-lib%  
   
 variable c-libs \ linked list of library names (without "lib")  
   
 : add-lib ( c-addr u -- )  
 \G Add library lib@i{string} to the list of libraries, where  \G Add library lib@i{string} to the list of libraries, where
 \G @i{string} is represented by @i{c-addr u}.      \G @i{string} is represented by @i{c-addr u}.
     c-lib% %size allocate throw dup >r      c-libs 2@ d0= IF  0 allocate throw 0 c-libs 2!  THEN
     c-lib-string 2!      c-libs 2@ s"  -l" append 2swap append c-libs 2! ;
     r> c-libs list-insert ;  
   : add-libpath ( c-addr u -- ) \ gforth
 : append-l ( c-addr1 u1 node -- c-addr2 u2 )  \G Add path @i{string} to the list of library search pathes, where
     \ append " -l<nodelib>" to string1      \G @i{string} is represented by @i{c-addr u}.
     >r s"  -l" append r> c-lib-string 2@ append ;      c-libs 2@ d0= IF  0 allocate throw 0 c-libs 2!  THEN
       c-libs 2@ s"  -L" append 2swap append c-libs 2! ;
   
 \ C prefix lines  \ C prefix lines
   
Line 431  create gen-wrapped-types Line 427  create gen-wrapped-types
     dup { descriptor }      dup { descriptor }
     count { ret } count 2dup { d: pars } chars + count { d: c-name }      count { ret } count 2dup { d: pars } chars + count { d: c-name }
     ." void " lib-modulename 2@ type ." _LTX_" descriptor wrapper-function-name 2dup type drop free throw      ." void " lib-modulename 2@ type ." _LTX_" descriptor wrapper-function-name 2dup type drop free throw
     .\" (void)\n"      .\" (GFORTH_ARGS)\n"
     .\" {\n  Cell MAYBE_UNUSED *sp = gforth_SP;\n  Float MAYBE_UNUSED *fp = gforth_FP;\n  "      .\" {\n  Cell MAYBE_UNUSED *sp = gforth_SP;\n  Float MAYBE_UNUSED *fp = gforth_FP;\n  "
     pars c-name 2over count-stacks ret gen-wrapped-stmt .\" ;\n"      pars c-name 2over count-stacks ret gen-wrapped-stmt .\" ;\n"
     ?dup-if      ?dup-if
Line 505  create gen-wrapped-types Line 501  create gen-wrapped-types
     open-wrappers dup if      open-wrappers dup if
         lib-handle-addr @ !          lib-handle-addr @ !
     else      else
           libcc-named-dir $1ff mkdir-parents drop
         drop c-library-name-create          drop c-library-name-create
     endif ;      endif ;
   
 : c-tmp-library-name ( c-addr u -- )  : c-tmp-library-name ( c-addr u -- )
     \ set up filenames for a new library; c-addr u is the basename of      \ set up filenames for a new library; c-addr u is the basename of
     \ the library      \ the library
     libcc-tmp-dir prepend-dirname c-library-name-setup c-library-name-create ;      libcc-tmp-dir 2dup $1ff mkdir-parents drop
       prepend-dirname c-library-name-setup c-library-name-create ;
   
 : lib-handle ( -- addr )  : lib-handle ( -- addr )
     lib-handle-addr @ @ ;      lib-handle-addr @ @ ;
Line 553  DEFER compile-wrapper-function ( -- ) Line 551  DEFER compile-wrapper-function ( -- )
     lib-handle 0= if      lib-handle 0= if
         c-source-file close-file throw          c-source-file close-file throw
         0 c-source-file-id !          0 c-source-file-id !
         [ libtool-command s"  --silent --mode=compile --tag=CC " s+          [ libtool-command s"  --silent --mode=compile " s+
           libtool-cc append s"  -I " append            libtool-cc append s"  -I '" append
           s" includedir" getenv append ] sliteral            s" includedir" getenv append  s" '" append ] sliteral
         s"  -O -c " s+ lib-filename 2@ append s" .c -o " append          s"  -O -c " s+ lib-filename 2@ append s" .c -o " append
         lib-filename 2@ append s" .lo" append ( c-addr u )          lib-filename 2@ append s" .lo" append ( c-addr u )
         \    cr 2dup type          \    2dup type cr
         2dup system drop free throw $? abort" libtool compile failed"          2dup system drop free throw $? abort" libtool compile failed"
         [ libtool-command s"  --silent --mode=link --tag=CC " s+          [ libtool-command s"  --silent --mode=link " s+
           libtool-cc append s"  -module -rpath " s+ ] sliteral            libtool-cc append libtool-flags append s"  -module -rpath " s+ ] sliteral
         lib-filename 2@ dirname replace-rpath s+ s"  " append          lib-filename 2@ dirname replace-rpath s+ s"  " append
         lib-filename 2@ append s" .lo -o " append          lib-filename 2@ append s" .lo -o " append
         lib-filename 2@ append s" .la" append ( c-addr u )          lib-filename 2@ append s" .la" append ( c-addr u )
         c-libs @ ['] append-l list-map          c-libs 2@ append
         \    2dup type cr          \    2dup type cr
         2dup system drop free throw $? abort" libtool link failed"          2dup system drop free throw $? abort" libtool link failed"
         open-wrappers dup 0= if          open-wrappers dup 0= if
Line 614  DEFER compile-wrapper-function ( -- ) Line 612  DEFER compile-wrapper-function ( -- )
     defer lastxt dup c-function-rt lastxt c-function-ft      defer lastxt dup c-function-rt lastxt c-function-ft
     lastxt swap defer! ;      lastxt swap defer! ;
   
 : clear-libs ( -- )  : clear-libs ( -- ) \ gforth
 \G Clear the list of libs  \G Clear the list of libs
     c-source-file-id @ if      c-source-file-id @ if
         compile-wrapper-function          compile-wrapper-function
     endif      endif
     0 c-libs ! ;      0. c-libs 2! ;
 clear-libs  clear-libs
   
 : c-library-incomplete ( -- )  : c-library-incomplete ( -- )

Removed from v.1.50  
changed lines
  Added in v.1.59


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>