1*b30d1939SAndy Fiddaman/* 2*b30d1939SAndy Fiddaman * {automake|configure} => {nmake|iffe} conversion support 3*b30d1939SAndy Fiddaman * 4*b30d1939SAndy Fiddaman * The first command line target overrides the default original source 5*b30d1939SAndy Fiddaman * directory name $(MAKEFILE:D). The hard work is in the makefile using 6*b30d1939SAndy Fiddaman * these assertions, since it must (manually) provide the nmake makefiles 7*b30d1939SAndy Fiddaman * and config equivalent iffe scripts. The conversion makefile is typically 8*b30d1939SAndy Fiddaman * named lib/package/PACKAGE.cvt in an ast package $PACKAGEROOT directory, 9*b30d1939SAndy Fiddaman * and the conversion is run from the $PACKAGEROOT directory, e.g.: 10*b30d1939SAndy Fiddaman * 11*b30d1939SAndy Fiddaman * nmake -I lib/package -f PACKAGE-VERSION/PACKAGE.cvt 12*b30d1939SAndy Fiddaman * 13*b30d1939SAndy Fiddaman * The conversion requires the ast nmake, pax and tw commands. 14*b30d1939SAndy Fiddaman * 15*b30d1939SAndy Fiddaman * After the conversion you will be liberated from ./configure, *.in, 16*b30d1939SAndy Fiddaman * *.am, automake, autom4te, libtool, make depend, and makefile 17*b30d1939SAndy Fiddaman * recursion ordering. You can build from $PACKAGEROOT using the ast 18*b30d1939SAndy Fiddaman * package(1) (which sets up the { HOSTTYPE PATH VPATH } environment): 19*b30d1939SAndy Fiddaman * 20*b30d1939SAndy Fiddaman * package make 21*b30d1939SAndy Fiddaman * 22*b30d1939SAndy Fiddaman * or cd into any arch/$HOSTTYPE/src subdirectory and rebuild that portion 23*b30d1939SAndy Fiddaman * of the hierarchy with the ast nmake(1) (after setting PATH and VPATH): 24*b30d1939SAndy Fiddaman * 25*b30d1939SAndy Fiddaman * nmake 26*b30d1939SAndy Fiddaman * 27*b30d1939SAndy Fiddaman * The conversion assertions are: 28*b30d1939SAndy Fiddaman * 29*b30d1939SAndy Fiddaman * package :CONVERT: file ... 30*b30d1939SAndy Fiddaman * 31*b30d1939SAndy Fiddaman * files in the original source directory are copied 32*b30d1939SAndy Fiddaman * and converted into the ./src and ./lib subdirectories 33*b30d1939SAndy Fiddaman * the default original source directory is ./original 34*b30d1939SAndy Fiddaman * 35*b30d1939SAndy Fiddaman * package package name 36*b30d1939SAndy Fiddaman * file original source file that must exist 37*b30d1939SAndy Fiddaman * 38*b30d1939SAndy Fiddaman * :OMIT: pattern 39*b30d1939SAndy Fiddaman * 40*b30d1939SAndy Fiddaman * files matching pattern are not copied into the converted 41*b30d1939SAndy Fiddaman * directory 42*b30d1939SAndy Fiddaman * 43*b30d1939SAndy Fiddaman * pattern ksh pattern of files to omit 44*b30d1939SAndy Fiddaman * 45*b30d1939SAndy Fiddaman * :COPY: from to [ file ... ] 46*b30d1939SAndy Fiddaman * 47*b30d1939SAndy Fiddaman * files in the from directory are copied to the to directory 48*b30d1939SAndy Fiddaman * the action may contain :MOVE: exceptions to the copy 49*b30d1939SAndy Fiddaman * 50*b30d1939SAndy Fiddaman * from original directory subdirectory 51*b30d1939SAndy Fiddaman * . names the original directory 52*b30d1939SAndy Fiddaman * .. names the 53*b30d1939SAndy Fiddaman * to converted subdirectory 54*b30d1939SAndy Fiddaman * libNAME => src/lib/libNAME 55*b30d1939SAndy Fiddaman * NAME => src/cmd/NAME 56*b30d1939SAndy Fiddaman * file files or files in subdirectories to be copied; 57*b30d1939SAndy Fiddaman * explicit files are copied to the to directory; 58*b30d1939SAndy Fiddaman * if no files are specified then the from hierarchy 59*b30d1939SAndy Fiddaman * is recursively copied to the converted directory 60*b30d1939SAndy Fiddaman * 61*b30d1939SAndy Fiddaman * :MOVE: to file ... 62*b30d1939SAndy Fiddaman * 63*b30d1939SAndy Fiddaman * :COPY: assertion exceptions placed in the assertion's action 64*b30d1939SAndy Fiddaman * 65*b30d1939SAndy Fiddaman * to files or subdirectory files are copied to this directory 66*b30d1939SAndy Fiddaman * file file or files in subdirectories to be copied 67*b30d1939SAndy Fiddaman * 68*b30d1939SAndy Fiddaman * :FILE: to file <<! 69*b30d1939SAndy Fiddaman * contents 70*b30d1939SAndy Fiddaman * ! 71*b30d1939SAndy Fiddaman * 72*b30d1939SAndy Fiddaman * the :FILE: action is copied to the named file in the to directory 73*b30d1939SAndy Fiddaman * the :FILE: action is usually specified using the here syntax to 74*b30d1939SAndy Fiddaman * avoid make comment, quote and variable expansion 75*b30d1939SAndy Fiddaman * 76*b30d1939SAndy Fiddaman * :EDIT: to file ... | - pattern <<! 77*b30d1939SAndy Fiddaman * edit script 78*b30d1939SAndy Fiddaman * ! 79*b30d1939SAndy Fiddaman * 80*b30d1939SAndy Fiddaman * the :EDIT: action is an ed(1) script applied to each file in the 81*b30d1939SAndy Fiddaman * to directory after it has been copied from the original source 82*b30d1939SAndy Fiddaman * directory; if to is - then the :EDIT: action is a sed(1) script 83*b30d1939SAndy Fiddaman * that is applied to all files matching the file pattern during the 84*b30d1939SAndy Fiddaman * copy from the original source directory; a file may be subject to 85*b30d1939SAndy Fiddaman * both a sed(1) and ed(1) :EDIT:; the :EDIT: action is usually 86*b30d1939SAndy Fiddaman * specified using the here syntax to avoid make comment, quote and 87*b30d1939SAndy Fiddaman * variable expansion 88*b30d1939SAndy Fiddaman */ 89*b30d1939SAndy Fiddaman 90*b30d1939SAndy Fiddaman.CONVERT.ID. = "@(#)$Id: CONVERT (AT&T Research) 2004-03-19 $" 91*b30d1939SAndy Fiddaman 92*b30d1939SAndy Fiddamanset nojobs noscan nowriteobject writestate=$$(MAKEFILE).ms 93*b30d1939SAndy Fiddaman 94*b30d1939SAndy Fiddamanpackage = $(PWD:B) 95*b30d1939SAndy Fiddamanhere = !-=-=-=-=-! 96*b30d1939SAndy Fiddamanhierarchy = src src/cmd src/lib 97*b30d1939SAndy Fiddamanomit = .*|*.?(l)[ao] 98*b30d1939SAndy Fiddamanoriginal = $(MAKEFILE:D) 99*b30d1939SAndy Fiddamanshowedit = $(-debug:?p??) 100*b30d1939SAndy Fiddaman 101*b30d1939SAndy FiddamanCPFLAGS = -u 102*b30d1939SAndy FiddamanPAXFLAGS = -u -v 103*b30d1939SAndy FiddamanSTDEDFLAGS = - 104*b30d1939SAndy FiddamanTW = tw 105*b30d1939SAndy FiddamanTWFLAGS = -CP 106*b30d1939SAndy Fiddaman 107*b30d1939SAndy Fiddamanall : .VIRTUAL file 108*b30d1939SAndy Fiddamanfile : .VIRTUAL edit 109*b30d1939SAndy Fiddamanedit : .VIRTUAL copy 110*b30d1939SAndy Fiddamancopy : .VIRTUAL init 111*b30d1939SAndy Fiddamaninit : .VIRTUAL 112*b30d1939SAndy Fiddaman 113*b30d1939SAndy Fiddaman.MAKEINIT : .cvt.init 114*b30d1939SAndy Fiddaman 115*b30d1939SAndy Fiddaman.cvt.init : .MAKE .VIRTUAL .FORCE 116*b30d1939SAndy Fiddaman local D 117*b30d1939SAndy Fiddaman if D = "$(~.ARGS:O=1)" 118*b30d1939SAndy Fiddaman if "$(D:T>FD)" 119*b30d1939SAndy Fiddaman original := $(D) 120*b30d1939SAndy Fiddaman .ARGS : .CLEAR $(~.ARGS:O>1) 121*b30d1939SAndy Fiddaman end 122*b30d1939SAndy Fiddaman end 123*b30d1939SAndy Fiddaman 124*b30d1939SAndy Fiddaman.cvt.filter = 125*b30d1939SAndy Fiddaman.cvt.package = 126*b30d1939SAndy Fiddaman 127*b30d1939SAndy Fiddaman.cvt.atom : .FUNCTION 128*b30d1939SAndy Fiddaman local N V 129*b30d1939SAndy Fiddaman V := $(%:O=1) 130*b30d1939SAndy Fiddaman let .cvt.$(V) = .cvt.$(V) + 1 131*b30d1939SAndy Fiddaman return .cvt.$(V).$(.cvt.$(V)) 132*b30d1939SAndy Fiddaman 133*b30d1939SAndy Fiddaman.cvt.omit : .FUNCTION 134*b30d1939SAndy Fiddaman return -s',^\(\(?K)?(*/)($(omit))?(/*))$,,$(showedit)' 135*b30d1939SAndy Fiddaman 136*b30d1939SAndy Fiddaman.cvt.to : .FUNCTION 137*b30d1939SAndy Fiddaman if "$(%)" == "." 138*b30d1939SAndy Fiddaman return src 139*b30d1939SAndy Fiddaman end 140*b30d1939SAndy Fiddaman if "$(%)" == "*/*" 141*b30d1939SAndy Fiddaman return src/$(%) 142*b30d1939SAndy Fiddaman end 143*b30d1939SAndy Fiddaman if "$(%)" == "lib*" 144*b30d1939SAndy Fiddaman return src/lib/$(%) 145*b30d1939SAndy Fiddaman end 146*b30d1939SAndy Fiddaman return src/cmd/$(%) 147*b30d1939SAndy Fiddaman 148*b30d1939SAndy Fiddaman":CONVERT:" : .MAKE .OPERATOR 149*b30d1939SAndy Fiddaman local I 150*b30d1939SAndy Fiddaman package := $(<) 151*b30d1939SAndy Fiddaman I := $(hierarchy:C,$,/Makefile) 152*b30d1939SAndy Fiddaman init : .cvt.verify $(I) 153*b30d1939SAndy Fiddaman $(I) : .ACCEPT 154*b30d1939SAndy Fiddaman test -d $(<:D) || $(MKDIR) -p $(<:D) 155*b30d1939SAndy Fiddaman echo :MAKE: > $(<) 156*b30d1939SAndy Fiddaman .cvt.verify : .MAKE .FORCE .REPEAT 157*b30d1939SAndy Fiddaman local I 158*b30d1939SAndy Fiddaman if I = "$(.cvt.package:T!=F)" 159*b30d1939SAndy Fiddaman error 3 $(original): not a $(package) source directory: missing $(I) 160*b30d1939SAndy Fiddaman end 161*b30d1939SAndy Fiddaman .cvt.package := $(>:C,^,$$(original)/,) 162*b30d1939SAndy Fiddaman 163*b30d1939SAndy Fiddaman":COPY:" : .MAKE .OPERATOR 164*b30d1939SAndy Fiddaman local F T I A 165*b30d1939SAndy Fiddaman F := $(>:O=1) 166*b30d1939SAndy Fiddaman T := $(.cvt.to $(>:O=2)) 167*b30d1939SAndy Fiddaman A := $(.cvt.atom copy) 168*b30d1939SAndy Fiddaman copy : $(A) 169*b30d1939SAndy Fiddaman $(A) : .VIRTUAL 170*b30d1939SAndy Fiddaman if F == "." 171*b30d1939SAndy Fiddaman $(A) : $(T) 172*b30d1939SAndy Fiddaman $(T) : 173*b30d1939SAndy Fiddaman test -d $(<) || $(MKDIR) -p $(<) 174*b30d1939SAndy Fiddaman for I $(>:O>2) 175*b30d1939SAndy Fiddaman eval 176*b30d1939SAndy Fiddaman $$(A) : $(I:D=$(T):B:S) 177*b30d1939SAndy Fiddaman $(I:D=$(T):B:S) : $$(original)/$(I) 178*b30d1939SAndy Fiddaman $$(CP) $$(CPFLAGS) $$(*) $$(<) 179*b30d1939SAndy Fiddaman end 180*b30d1939SAndy Fiddaman end 181*b30d1939SAndy Fiddaman elif "$(F:T=FF)" || "$(F:N=*.(pax|t[bg]z))" 182*b30d1939SAndy Fiddaman eval 183*b30d1939SAndy Fiddaman $$(A) : $$(F) 184*b30d1939SAndy Fiddaman test -d $(T) || $$(MKDIR) -p $(T) 185*b30d1939SAndy Fiddaman cd $(T) 186*b30d1939SAndy Fiddaman $$(PAX) $$(PAXFLAGS) -rf $$(*:P=A) -s ',^$(>:O=2)/*,,' $(.cvt.omit) $(.cvt.filter) 187*b30d1939SAndy Fiddaman end 188*b30d1939SAndy Fiddaman else 189*b30d1939SAndy Fiddaman F := $$(original)/$(F) 190*b30d1939SAndy Fiddaman if ! "$(@:V)" 191*b30d1939SAndy Fiddaman eval 192*b30d1939SAndy Fiddaman $$(A) : .FORCE 193*b30d1939SAndy Fiddaman test -d $(T) || $$(MKDIR) -p $(T) 194*b30d1939SAndy Fiddaman cd $(F:V) 195*b30d1939SAndy Fiddaman $$(TW) $$(TWFLAGS) | $$(PAX) $$(PAXFLAGS) -rw $(.cvt.omit) $(.cvt.filter) $(T:P=A) 196*b30d1939SAndy Fiddaman end 197*b30d1939SAndy Fiddaman else 198*b30d1939SAndy Fiddaman .cvt.move = 199*b30d1939SAndy Fiddaman : $(@:V:@R) 200*b30d1939SAndy Fiddaman eval 201*b30d1939SAndy Fiddaman $$(A) : .FORCE 202*b30d1939SAndy Fiddaman test -d $(T) || $$(MKDIR) -p $(T) 203*b30d1939SAndy Fiddaman cd $(F:V) 204*b30d1939SAndy Fiddaman $$(TW) $$(TWFLAGS) | $$(PAX) $$(PAXFLAGS) -rw $(.cvt.omit) $(.cvt.move) $(.cvt.filter) $(T:P=A) 205*b30d1939SAndy Fiddaman end 206*b30d1939SAndy Fiddaman end 207*b30d1939SAndy Fiddaman end 208*b30d1939SAndy Fiddaman 209*b30d1939SAndy Fiddaman":EDIT:" : .MAKE .OPERATOR 210*b30d1939SAndy Fiddaman local A D F 211*b30d1939SAndy Fiddaman D := $(>:O=1) 212*b30d1939SAndy Fiddaman if D == "-" 213*b30d1939SAndy Fiddaman A := ^$(>:O=2)^$$(SED) -e $(@:Q:/'\n'/ -e /G) 214*b30d1939SAndy Fiddaman .cvt.filter += --action=$(A:@Q) 215*b30d1939SAndy Fiddaman else 216*b30d1939SAndy Fiddaman D := $(.cvt.to $(D)) 217*b30d1939SAndy Fiddaman F := $(>:O>1:C,^,$(D)/,) 218*b30d1939SAndy Fiddaman edit : $(F) 219*b30d1939SAndy Fiddaman eval 220*b30d1939SAndy Fiddaman $$(F) : 221*b30d1939SAndy Fiddaman $$(STDED) $$(STDEDFLAGS) $$(<) <<'$(here)' 222*b30d1939SAndy Fiddaman $(@:V) 223*b30d1939SAndy Fiddaman w 224*b30d1939SAndy Fiddaman q 225*b30d1939SAndy Fiddaman $(here) 226*b30d1939SAndy Fiddaman end 227*b30d1939SAndy Fiddaman end 228*b30d1939SAndy Fiddaman 229*b30d1939SAndy Fiddaman":FILE:" : .MAKE .OPERATOR 230*b30d1939SAndy Fiddaman local ( D F ) $(>) 231*b30d1939SAndy Fiddaman local A 232*b30d1939SAndy Fiddaman A := $(.cvt.atom file) 233*b30d1939SAndy Fiddaman $(A) := $(@:V) 234*b30d1939SAndy Fiddaman D := $(.cvt.to $(D)) 235*b30d1939SAndy Fiddaman file : $(D)/$(F) 236*b30d1939SAndy Fiddaman eval 237*b30d1939SAndy Fiddaman $$(D)/$$(F) : 238*b30d1939SAndy Fiddaman test -d $$(<:D) || $$(MKDIR) -p $$(<:D) 239*b30d1939SAndy Fiddaman cat > $$(<) <<'$(here)' 240*b30d1939SAndy Fiddaman $$($(A):V) 241*b30d1939SAndy Fiddaman $(here) 242*b30d1939SAndy Fiddaman end 243*b30d1939SAndy Fiddaman 244*b30d1939SAndy Fiddaman":MOVE:" : .MAKE .OPERATOR 245*b30d1939SAndy Fiddaman local T I 246*b30d1939SAndy Fiddaman T := ../../../$(.cvt.to $(>:O=1)) 247*b30d1939SAndy Fiddaman for I $(>:O>1) 248*b30d1939SAndy Fiddaman if I == "*/" 249*b30d1939SAndy Fiddaman .cvt.move += -s',^\(\(?K)$(I)),$(T)/,$(showedit)' 250*b30d1939SAndy Fiddaman .cvt.move += -s',^\(\(?K)$(I:C%/$%%))$,,$(showedit)' 251*b30d1939SAndy Fiddaman else 252*b30d1939SAndy Fiddaman .cvt.move += -s',^\(\(?K)$(I))$,$(T)/$(I:B:S),$(showedit)' 253*b30d1939SAndy Fiddaman end 254*b30d1939SAndy Fiddaman end 255*b30d1939SAndy Fiddaman 256*b30d1939SAndy Fiddaman":OMIT:" : .MAKE .OPERATOR 257*b30d1939SAndy Fiddaman local P 258*b30d1939SAndy Fiddaman for P $(>) 259*b30d1939SAndy Fiddaman omit := $(omit)|$(P) 260*b30d1939SAndy Fiddaman end 261