help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Extending make with guile


From: Laurent Pelecq
Subject: Extending make with guile
Date: 09 Jun 2002 23:13:29 -0400
User-agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/21.2

Hello,

I've tried to find if it was planned to extend `make' with guile. But
I've found nothing. However it seems to me that `make' is a good
candidate for that. I've attached a patch to this mail that allow to
define functions with guile. It is based on make 3.79.1.

This is not a patch that may be distributed as is. It just shows that
it's easy to do. It has several limitations:
. functions are supposed to be defined in a file makefile.scm in the
  build directory. This is hardcoded in functions.c.
. Functions in `make' and `guile' must have the same name which makes
  impossible to create a function called `define' or `list'.
. It uses the GH interface which is deprecated but still supported.
. Only tested under Debian GNU/Linux.

I've excluded configure from the patch to make it smaller so you
probably need to run autoconf first if you want to try it. The patch
is uuencoded, I don't know what is the prefered format on this list.

To enable guile, use: ./configure --with-guile

Here is an example. The only guile function provided by make is
make-register-function which takes as arguments the function name, the
minimum numbers of arguments and optionally the maximum.

  ;; makefile.scm
  ;;
  ;; With 1 argument
  (define (now fmt)
    (strftime fmt (localtime (current-time))))
  (make-register-function "now" 1 1)
  ;;
  ;; Without arguments
  (define (hostname)
    (utsname:nodename (uname)))
  (make-register-function "hostname" 0 0)
  ;;
  ;; With any number of arguments
  (define (join-string sep . l)
    (apply string-append
           (cdr (apply append
                       (map (lambda (x) (list sep x)) l)))))
  (make-register-function "join-string" 1)


  # Examples of Makefile
  all:
          @echo Current date is $(now "%c")
          @echo Host is $(hostname)
          @echo Path is $(join-string :,/bin,/usr/bin,/usr/local/bin)


  $ make
  Current date is Sun Jun  9 22:53:10 2002
  Host is raleigh
  Path is /bin:/usr/bin:/usr/local/bin

Any comment is welcome.

Laurent

begin 644 make-guile.patch.gz
M'XL("`05!#T"`VUA:V4M9W5I;&4N<&address@hidden(TOYLSOZ(7B=G`D9@
MP)?$=NP)P=AA%U\.X)WD]>address@hidden@TP]DSB<address@hidden
MNNY5K0SLX5"4_)DH?13RWG)F`UF>FJ'P?'NT.3&_RM)6^?5>N;IYAN]#VY%E
M<R(>&<^52J65"]>ZP'PB;X38$97:address@hidden
M^SO;^]L56E3+O7LG2KO&KBCN&GOBW;N<R(D;V^U?=BY.._6SKCA<(Y08+IY>
MM=K-?OOXI%T_Q;AXEQEX%P$TYN8;T71.O!"]L0RD"+R9;TE!M`7"=`)/C,U;
M*48R#.5]*'PYE+YT+1GD1+?3Z*X)^CL4PO3+%CX"RW3QQ?(F$],=!/@ZL&E&
MWD_Q&U_XT'C,7"NT/8+]/2?6UH#?FX;X94^FCFW9]/4/[P:?$],FJ(D=6'CX
address@hidden)U==&=5L4:Q5Z$*-<SW:#L/^A63]N=NC`,4%C,9!3?!(=`SG$
M-]IFS,address@hidden:],WD#>S$;address@hidden"9X''&F/(8<2H0%7*\?
M'T,X+_/MUON+]__J%L2[>KM]T:address@hidden(I_`9B^IB5:(address@hidden
M]?-(#\K5G+#=H=?O-3^VSD\NXG&01^.TY+AY0L-KI>-ZNU7O7M9['PY_7W^9
M-QW;#&`6X\+OZZ)T3-NWF\>M#D\ZGF6"6;:O)UOOXQG[)AYNG3?:5\?Q(MME
M6]/3[VAC4N"2!B,J2JVR*+5>Y@/?(C!]7`"`-\\"B[G22)C2_-CKU/O'K6X/
M4E_K0`'.FN)F9CN#<C`NVR[61'PK"#5=MF9!Z$T"TBHOE"4K""?07!8\VVP0
M0G&(BZ+;N+CLM2[`\VYDP;_G!L]U,:9E>>[0'FEU6QQ>[F"2^;7>3+*KJ%5$
MM;(/;U'=7>Y?4FNZ@&?WLB>JV[1FZW7B7FJ[QA8,A[P,V<WFACC&J5PI0D]\
MF;FD[W(@',\=O0)A<T-J/$<>P!Z*M[8;address@hidden"address@hidden/!NZK$,9&V,I";&S"
MQ\Q<_!8S`$[,^WX(OU-,[3BV`]I6:XX806CP1[/IU/-#6E_4ZS_4_]/LL^#_
M"NM9B\N3;;%\^#'61_-K)[ZM6+\EJK7]RM[^3O4QUL=K4JROU?:W=O>W:PGK
MJP9<%GV`\:address@hidden/I2M\,P6=S!M4T0QL3SH.X>address@hidden
M"JUM>-,'G'D<BCS,J;JWMVW0YT[I#3_WQ(DOI>AZP_#.]*4X\2`!D_RV(5JN
M559(>B0X,@5!3UH0Z`4'$*I\%`=S86<73GM/%.E94\[[A;AR?-L:BV-?3J?2
M%V\'ZLL[ZV'DSF":WN1(T0D*7JC8%9&`^"-N\/"F-K'!'8A9@"]$%AAQ9X=C
M;T9A+`BQ!5$10#E;(:W+E5[04H:'HYCZWA_2"@-Q-R9BB';7"X5Y:]H.Q09!
MVNCS"4_/K\3E[`:!2[1M2[J!9%S82*T-0MMQQ)address@hidden'QK#Q+5'GH)EBC.
M1O$1CCE\*!.V2T>:`9-`I@(=IR6F%<address@hidden,L;,/,W,+L1G34FM`S+^8&#G;)2
M.?J`A$N?4:3H;MLWOND_S`''D,M809C^'C>*S^"&-US`XF@:P2C+NT4:,V#&
M/#SS$`9K$\&2]J0V("S1'E/3^FJ.9/Q,]DIOM'P#/ABRL`<6B9(address@hidden
MX'$V1''address@hidden<A08-*W2WVLT4V_T$6VOSO/ULWZ[T3]K=KOUTV;7R!7CF>OL
MU&>#?/@U?'A()WMI6GWKMC]&JB7]OHK^_3'"Z8,,V*)==OD"Z!KUQ@>$WP_-
address@hidden>ED"1'J[QH(>IU/_7;K'*M?1'[_K=H14008KGT9SGQ7
M+%#+?TOQ'X+,1[8^=+W"YX):GIQV&63FM"41G1?L:YTW\QR!4M!(6)X"@;\R
M(B@<7<<\$/&`A#MU9N7%5-@,TL<N1X0/[1Q_TF]5(NQ5*)3L[NT8>address@hidden)G
M;'address@hidden;<OUM^^?7ETI,?615%4O\!U>ZY\^_;H""[\Z`BXK+'ICN2?,YA4
M_MKX7"!.(4"_2.L9^UEF&SRR8Z(,8/7TZ"@N!QU*.UB1&S,?A4+H/*C`/C$M
MWQ,!O*\S4"4%+0R03`O*J(6I,$4H%+QR7)8)address@hidden@1\/(#FQPYW(MR
M;1$*BL>1#1;address@hidden(<0%(_\XFJZ8UM`&6IS`3AH!Q*3M@([<5V0`>
MV.;(]8#5"address@hidden;\U\B21S?V=G=U]H]6Y<G%TB5X'/@R]`."97(&address@hidden:
MW4;_\J+;address@hidden,(<D7.CZ`X^>OTC))CROC3<ZR4UTHSXV"^1,(address@hidden>*
M$'XJS.PJOL)F1^2Z(address@hidden;W`OC?`>E_ZON?#F#'</5Q_20]1<A3`
M^F>VGL^Y(I-)-`!1)address@hidden"#PIWG?[61=%(,%Z>4')8C\.BYMI#/O'address@hidden
MP,='2!KYYF1)address@hidden/"@4189-D#CQD)address@hidden/JH,%)1Z9%(
M"1FSLP_&'#(B7*ORJ`,A;5)address@hidden@3X+>H&12:\XB*[%Q0IV*T$*$RW0?A($F,
MX9]DPA(C&WM3'address@hidden&>.$:&AH/];J_?AXJHGZN>?Q&_U3J=^WOMT
M$*=A\E8J=%SU`SM.YB,U>`"C(BQGS4[C`Y;5W[?:K=XG.ME)JW<.KRA.+CJB
M+B[KG5ZK<=6N=\3E50=:V81]=R5;:H1D!<.'+#>??&Z(!"A8X,8GR#SMMWQI
M23@"))>493X\+=.8\5PSL?JR2TS4*E#4*M^/$O-3Z_R4TM(A)3B&N/-M2G.\
MYRB#4FM#[.R)address@hidden)5(E6+$ANC-"LK55B>7S'OZ+%IS51:56K59+U:W*:W'5
MK<]SH`Y'*(*IM"@.H,R24[73*CK864*+H/9V0%H6(2-^FX.!K?(YY9(U"SF#
M@@N$'%RE:G9(5;G*]0#$1=\2=94)5:2OI)>&CJW(^MRO2D"T.$X"60P>FPWW
MNF+><D8ZF%DP11=HI34+*2DVE,RHKN5L&=D<B)/.4*CPE%(VI(<S)R17E2PG
MO%R6/#\7C+7/Y_#$/(*]I7""'O#(]6`V#W%)address@hidden,S=,V1'address@hidden:9(6J
M'EPJO</EOB#A;GS^L7<'Z_6Q#IF3#9E+=BR*HSX$ALH**7_&@:5(9TV?L*?^
M6VQYA#QS2GX$"N52WN$Q-CZ>5J)HBVCYH]J;.&[.3I3BL45R"(address@hidden
M)OKLCZ+4)`2*U;'SB%T4;6%$>=`CSHK-*0P,S<ZT5"(\7,J!#=GSL^H0Z3`]
MY</address@hidden,;>>/:`6*R@<0$E2H8)2.S.(<`6A&<[87H,9BCF.=^2WV80,
MWF`R"ZCMX\A0)K+/"`D4VI;F&9!.%H2JN:S<GMK#8A[RSBJFW;GL2337$(2P
M!<]88P_8(U1W8\E2(;-FWLT30Z*(N,7K,_N5YT@:>,Q?)(YC[67429<?L4P)
M34:^?=6`IUY3(%'7.N9()3>6-YG:#MDG%9F1K2:ICL*2T7J54?LS5VG,%^Z7
ME50&^4H$EF]/R0NZD!GGC`DR(^7LD"["87!Y#A-4\\BQ5=(;70,P2>0LR+:@
MUG&&$R%7/10<";3<>7'['"HQ,?VOI"`X8S"[0<(<SE3P,&.-A4DB<>Q>O>_V
M%+_Y8RUS94$<4]PB29H!/TW1H'address@hidden<[=7X5A+E)\##1\O<[BRYJ9-
MMQT31$2]T'1@'8'address@hidden)-"1.11H'(address@hidden
M1NJ<-J)'5<.!^%)R6+*OB(=Z)7L(/DK<T^!89*CD+A85'SS1G[4U';)\E'DV
M`H;(.S:2[)address@hidden)H<@0</JF0Z,address@hidden)<Q8L:?-A^8P2^9]R-5H*
M2IETQK*VQDJF.*%)*V=+DI1Q?#:X&address@hidden@/`EA_4ZU^1BK
address@hidden"address@hidden(address@hidden&I5G+T%`7&:DC41)XTAL#N3MICO#&?[W/_%-53(2
M;D2LQ^78/FU(EL][II$<D.8H(F)K^'5=5(]^J6E,]W`Z5?K^G3[26GVXGC':
MB'U?UA-`K5OSD$2Y`HLL9^XF9'$FOCE*>-1I=J_:O?R####*[81G]].CVP6Z
M47ED?'E'/04PUU*O5AYMJ:<7K;S.R/34-S=$:B'4^?21]CA'HG3IS0WSN/17
MMQ?%GX5.U,address@hidden(C<M114V^5N=/3?0A".='>BLJ%B0SM":QVD%R8
ME-6Q]_B:F![5FNX`_<TK&?&C5S+%'T>090K%W;AAU#KO]3Y=-KO]#\D5<N8D
MC"B!TBVRK==OB$%;;[;CF_3']QA8\WWG\L(.QXW39J_7_-C+GO>O]/,6CI^:
address@hidden>5\[1.14(<51#;:%XU_]XG0UEGSK]JV5MW')E99MX)8O#';7FG>>M7<
MG=G>_E8U9=_;+$=Z5'>T(#F*--K][J=NO]LZ;;>ZO9S.E$[3ZL;QIMXY[5-/
M(C_2B="U0-RFU*BD=#/UUW2Y5,GH[&=>$O6.[U_22A1`XE#<)_WB8BHY8*>K
M1U2_^5=1DG^*BOCEE_EV,:^(>LG<X.53-.,P%Y]$OZ^!4E4&]#9&5$$//<?Q
M[BAUM%69-I'ZTHDZ+`^TC',"[JVYTI)!@'!,%V.>_Y7*)DQ[]!8(NQYX%XXB
MS7JG\8%Z>MT\E&YZAY+(`"UNX?DZE7K?8_GP<GU*YI]_]9U:DWZSIKJ_O;</
M54RNOO=(E?!94YH47T"LFRA,S?)X'6/2Q1%)G5[8PWD_E=Q8L(ILCL:P=VZ9
M:P>M-*#3/(5*-CM]9#H->GE@;6V=Z?7ER`:;_5)$,0*ZVI!L/]F)'46N2(Z<
M2+#&IB\V\ANTJC\-_7Y8H!X8O1"4SZM)Y//3&5(G]6O#]$>W!D4DJ)\:&E)5
M6R@<:._5]KROLZE0I;ET0R24E#91(AW"!T3TJ:PMJC^B>*+<$K<W`BBG'!Q0
address@hidden"Y-ZOR87^0[O`%?]6U3V4]++R"BN"3E$S65#E?FR>address@hidden@[-#J6K
M+W$C.E+EJ!_=Q#&address@hidden;&?UCZVSJS,R^RZ91,address@hidden)E\I2H$'W
M]F0VX?0749P1\$M#I4!.317F8>@S50")$.DR1W[Z.9I-P+28.\V/E_7S8[5G
MM)%*4!/8J*-X(_6K44E3WW9O/55^JJ[Z27)J0D,E*(073$V+R+`MV"TEN=*T
address@hidden(%(LOF(?O<JRC@@DYF5Q+8^\ZS/4J>\X9L.F$:U0K?RQNYNE%"(^.4/
M5J*)[1+'^CA3<+`40+$T#<#CBAX]7(J'4RK](PK-OC,address@hidden@:U[*
address@hidden,'6]$3]PAO%QT7V)`+[OW)Q%`(@8<(H$K?`KW?U._5>4VSGBJ"I
M^(address@hidden;#\>;/=/#,$93.%M7R>GF*C<#]AO&`/SQ?$!F\/0V"(0J&0
M0M=IIO!=]CJ&>`0I5$AC)address@hidden>&*/8B1I&;+>28V<D6+[:0_-Y'/\`AZ
M%-JFTR?TA55"$!NNO--?#S-\$OFJL7R-4HEX7>address@hidden'=F.+C>_%+8MRFI
MZ0C]",X$;GYGK3H+I"]#5*3;XC7\L=FL5,F%$])IL$GED?VOYT`_Q[#ZKCV>
MQ^!WK9Q/R=D<##)4Y1^!5!ZZ/^7392R8#%B-/NYFELZGO(S&address@hidden
MCL43-]370W%^U6XOMWQ,ZI,IIL;:Q)-'J=E8Q(6HUY!!1MMIA/PHJL?FO%Z)
M!&-*KS*V/@address@hidden,C_LG:))?1COPC?0=S>2'/K>0:JP!,EYI^E(VZ['W*HFY]R
MD`\<$C+ZDF?'/P^25AK`9D/5'&address@hidden"F=`F0FC&4!(P4#5!)_BHLB
MN\[H3+'X6?.4T3QCQ8+IZMG$<"F3[(8JK4#2])]ZIU5_CZ3T_=7)2;-#?;.+
MZ)6FF<.I%+W![5+V1=4MIT/J10"Z%N!^%O(,address@hidden,ZG^<J=YV:XW
MFF6UFE*KF>.4Z/+;=DEIZ&JVW3S'#"/CGJ!T1W07%^&A+3L*9FX^1DZIW?M/
M_=\N.L>$B;/YVAL#I4%QJ[(5O4>8$]IK*3>S4LUS.D.-(Y7(ZVN_H*#?_WD&
MELAK/@4?0XH4I'*#E"E]RW%O/11930^4FJ_.3R![0013_IX_$-K/LS7]4SLP
address@hidden@]$V;P]IV^B=)T%E:MX.;AS3_8K,(.-["UH=>>'G`K5/,R/B
M\%"\^KWRJI#!!OI=%,!YNL5*J(M_8&$A7I!6:^2*='P^V#3RM[%A'`@<'2>;
MZNC\+7K9:B6[(E=%;-/PQ(Z4H]'L**X]Q8ED3<2)U$C$"4PP*B9L`:``3NF-
M4DQ*.<3XAV)2<4WS)_$7Y(83OJEXA:$2^P+V!ATU5:6#7M9[*$S/X?1":XP(
MTJ7LL$(SKA=&!0/W779K%6/GC2A6=_?VC->J7M:U\3_X=42=;0)#Z_RTWVW]
M7[/?N[IL-_/]H"#HPU"QD/)'_"I5(6-NT69JST>JSA+KPT^K.DL_L>HL)56G
MHO*'JL[2WZDZU;X_L>HL_>RJ$Q1&KEA5:Q04"6RASEM5XF%15.654BA7&7AV
address@hidden<FYU<:F6/('D+/6.<F26/MKS!`^#_S+$E5?1Q8\]6$(
M]^M0=_JK&>H?DA^5"0`BF$'K[OLQ['=C%3X%_9/PW9B!)!9&address@hidden&5>,+X+H
M#VQ_!2+,QCA^"!'\3!;7`B(%T5>G7(&);Y?31&T9ZE^,B2%68DBS^D=H&<*#
MR?2I%N2F(/3#FX5/(BL!2"/\,address@hidden<D>/(address@hidden@_#.\P?1&1=8%4.L
MP/*'address@hidden()B:85;L"S*/(%:)?2P=)TW&PED88A4&!*#,.18Q`&(5
address@hidden<YV!I:9R&,10P2Q"DE*H,OE\81`:address@hidden@"2;"2&0RQ
address@hidden(V0T:P&address@hidden"JT)3BBDU1B!5<0*W!0@,NPLVHDI,0A<`4"?FUZ)2<8
M8A4O3=]-;/WO8+"'64?/^I!AA#VDY?I^!*&RV6F=-<][]?;CY_IS"<Z,GLD_
M5\>,)X(/()@FE:address@hidden)FOL=M7PXR:640/TG:7['S:(,TAR&^CU!
M3H#YK59*#><3#Y4'J?^K_'K7J-$EYIO*ME%[$W?745J[U%2YD2-1I*)#EX??
M4P7=]!"S!E(Q?Q0<address@hidden/*AS*FJ:Z<OD4%E.ZMR?OP0.>)^"L6W;AK
M$9<[U%/(M$V.P#/4,<EDNE&"25UH/9<N75ZA+EM+$R4BHKCUJEHKA\LW3:I(
M083E_TFMT_N0FBR(67WZWH]279'WIM)%"address@hidden:%0B%5E&HL
M1"^HB[F3(2VF*-7V2:'@?'6:Z0II.J8&XR\<1,#2"62R\%OZ5#&6Z4%F6!-(
M%61JXCN(?0;75+WY,QA&F-*\BADTY;X5)address@hidden,B%O.-\+T35/V'-81)&%D
MWBU=/#V(1C+,BA9F*2S^?RE7L]0V#(3/Y"G4GFSB=)P8!D).T$++M"1,`L/1
M$TR`S)0X34(Y=/KNW3_)DF4[:<L%D+2KU:XL[WZ[LE:@S4&>]!;[_A?S!88Q
M[Y0:O_(=!9-7_F`]S,?'?2HYZG?[43>.Y6%>YLM4UT"address@hidden);0/$=D
M5X"=/+20]HI$LQ,[M=ITQ'%5`F=JU$YADX#=DX]77-*@<4QH2,]'C&MCIT"!
MW'$V&GU++TP?,(..I^>4(VL=MH7*S,*'"F-7]#>/$)'V4=$HXX!SI6_/M(K]
M9:B6[?;`:address@hidden;address@hidden@Q#(address@hidden(46>/"`IDVRX+Q7/$;
address@hidden',ORL%_-/E*M_,LDV:W^,-6A7P`"9DL`Z5]NU\^/GFB]N;
M0Y_9$O<00(##SEE-L']$VDW'HX]?3L<30XBUCPL!_6#RUT73]'I?\5:JK2/8
MLL=`C%:;5:++$PPD&address@hidden<Y`RW6$>/WG*X';"Z3"P7Z^V4GDXFY^,;
M%?#B^55_37;AS12YTR&X09D+9178>.45827[X>W5V?GX.K`E!O[>`G".WHYS
MX/GVCHANAV?#3R"YL_HR$EDC4HDJ<C-:6J:$LUC-`N&/I6A\,K*7'JK?G<-`
MA?#+R]RYKHM,JWDM9F_PL!4FBNC8#$NC8,:2HJ5?"X>W855QCCD[V!P[-[ML
MY3E>)$?'*RUPNF"GQ%X!FM9A]/C=F.K\==)CD4O*"S:1LD"@:`^<address@hidden
MII&-`!+_Q<9`/M%>3"address@hidden'<";:address@hidden:@=$J2?GP!ZH(=A("FIJ
M;J(2E?W;I`+<`+FK\C+"LHT#H371?S`Q*(W/1'<UD6MTIFQTTU-/3*",IP!L
MK:<Q.$Q4LI;N:#`8H2^>O:address@hidden(6AMH"&3QB;"YGLH`*V55ZHX&4K9`
M29/-VC<(2EF3NJ.9=.VOCYKKJ00K\<BXO6&/"4!B'M`X<G"1>DJ"18"L2S1Z
M/FRMIV$DQ!.2FALT(NC'W]+-'\5LUK+FCSB^"N6H$_F';_O9C\;CLO+8HFD9
MR&@KY>$3FT&E.T>O8BPE`)<QFSV\KN"E5>,Z:!?8\_?T2UM6$(=6#=LMN#$I
MOJDO@"?7L]*7W>#M_UZ[1M,,ZXM5X(address@hidden(`H43TX?2P&+=%:]^
MXRS$E-[<N0Q9?TS.:ZHN/^8^4WK<3;#TN'=P<G!877HLX]T/^B4')UVKA/WH
MJ(NUZVWZ?>QD4G]S::(5[(&3\I,S^F!C*NQ/3Z\N/Y^2S>56`2C.J1[GDKH%
M&!+%40&5(:Z>,A,C<E"%VOUN,V'.PF`[*03BZ-BW9"@/X_`3A9:/E2C-PM0Z
M%'%JJ8F7VF'6G>U"&+51N82CMC6\[!?IXH6##=1Z/SG$:N]^<BP70"C0F\PV
M"G//N9*]^KJ>K=3#=#,%#Q=O!X:2!%?4D^H=3;$\QXJ77$*(>42=N):/3JTZ
M6K6%9\I[UW-7,1K6L`/>@[`N9+[-,/-KBG?E4;^[''X:W4T2N1713V*^_Y,0
MM,C%+Z5GI#;address@hidden<%CH+S"LFW?LNV299ETH'?.;GN,#[U?OHB*
MMAC!4#9G?4C"@0+GZFSE+J!X)L(address@hidden/5VML2(@?RQ2Z'CC-\L?I'G]
/-J?*"6V?/Z1E--AN5```
`
end





reply via email to

[Prev in Thread] Current Thread [Next in Thread]