1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429 |
- USAGE_LICENSE="[-author?Glenn Fowler <gsf@research.att.com>][-copyright?Copyright (c) 1994-2012 AT&T Intellectual Property][-license?http://www.eclipse.org/org/documents/epl-v10.html]"
- ########################################################################
- # #
- # This software is part of the ast package #
- # Copyright (c) 1994-2012 AT&T Intellectual Property #
- # and is licensed under the #
- # Eclipse Public License, Version 1.0 #
- # by AT&T Intellectual Property #
- # #
- # A copy of the License is available at #
- # http://www.eclipse.org/org/documents/epl-v10.html #
- # (with md5 checksum b35adb5213ca9657e911e9befb180842) #
- # #
- # Information and Software Systems Research #
- # AT&T Research #
- # Florham Park NJ #
- # #
- # Glenn Fowler <gsf@research.att.com> #
- # #
- ########################################################################
- ### this script contains archaic constructs that work with all sh variants ###
- # package - source and binary package control
- # Glenn Fowler <gsf@research.att.com>
- command=package
- (command set -o posix) 2>/dev/null && set -o posix
- path=Bad
- case $PATH in
- Bad*) echo "Cannot be run by zsh in native mode; use a sh symlink to zsh" >&2
- exit 1 ;;
- esac
- unset CDPATH
- case $0 in
- -*)
- echo "dodgy \$0: $0" >&2
- exit 1 ;;
- */package)
- mydir=`echo "$0" | sed 's,/package$,,'`
- cd "$mydir" || exit
- case $PWD in
- */bin) ;;
- *) echo "this script must live in bin/" >&2
- exit 1 ;;
- esac
- cd .. || exit
- unset mydir ;;
- package)
- echo "this script must be invoked with a direct path, e.g. bin/package" >&2
- exit 1 ;;
- *)
- echo "this script must be named 'package'" >&2
- exit 1 ;;
- esac
- # shell checks
- checksh()
- {
- "$1" -ec '
- # reject csh
- case 1 in
- 1) ;;
- esac
- # reject special use of $path (to use zsh, use a "sh -> zsh" symlink, which disables this)
- path=Bad
- case $PATH in
- Bad*) exit 1 ;;
- esac
- # catch (our own) pipe/socket configuration mismatches
- date | "$1" -c "read x" || exit 1
- # check Bourne/POSIX compatible trap exit status (should exit with status 0)
- trap "exit 0" 0
- exit 1
- ' x "$1" 2>/dev/null || return 1
- }
- LC_ALL=C
- export LC_ALL
- TMPDIR=${TMPDIR:-/tmp}
- export TMPDIR
- src="cmd contrib etc lib"
- use="/usr/common /exp /usr/local /usr/add-on /usr/addon /usr/tools /usr /opt"
- usr="/home"
- lib="" # nee /usr/local/lib /usr/local/shlib
- ccs="/usr/kvm /usr/ccs/bin"
- org="gnu GNU"
- makefiles="Mamfile" # ksh 93u+m no longer uses these: Nmakefile nmakefile Makefile makefile
- env="HOSTTYPE NPROC PACKAGEROOT INSTALLROOT PATH"
- checksum=md5sum
- checksum_commands="$checksum md5"
- checksum_empty="d41d8cd98f00b204e9800998ecf8427e"
- package_use='=$HOSTTYPE=$PACKAGEROOT=$INSTALLROOT=$EXECROOT=$CC='
- PACKAGE_admin_tail_timeout=${PACKAGE_admin_tail_timeout:-"1m"}
- CROSS=0
- admin_db=admin.db
- admin_env=admin.env
- admin_ditto="ditto --checksum --delete --verbose"
- admin_ditto_update=--update
- admin_ditto_skip="OFFICIAL|core|old|*.core|*.tmp|.nfs*"
- admin_list='PACKAGE.$type.lst'
- admin_ping="ping -c 1 -w 5"
- default_url=default.url
- MAKESKIP=${MAKESKIP:-"*[-.]*"}
- RATZ=ratz
- SED=
- TAR=tar
- TARFLAGS=xv
- TARPROBE=B
- TR=
- all_types='*.*|sun4' # all but sun4 match *.*
- case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
- 0123) USAGE=$'
- [-?
- @(#)$Id: package (AT&T Research) 2012-06-28 $
- ]'$USAGE_LICENSE$'
- [+NAME?package - source and binary package control]
- [+DESCRIPTION?The \bpackage\b command controls source and binary
- packages. It is a \bsh\b(1) script coded for maximal portability. All
- package files are in the \b$PACKAGEROOT\b directory tree.
- \b$PACKAGEROOT\b must at minimum contain a \bbin/package\b command or a
- \blib/package\b directory. Binary package files are in the
- \b$INSTALLROOT\b (\b$PACKAGEROOT/arch/\b\ahosttype\a) tree, where
- \ahosttpe\a=`\bpackage\b`. All \aactions\a but \bhost\b and \buse\b
- require the current directory to be under \b$PACKAGEROOT\b. See
- \bDETAILS\b for more information.]
- [+?Note that no environment variables need be set by the user;
- \bpackage\b determines the environment based on the current working
- directory. The \buse\b action starts a \bsh\b(1) with the environment
- initialized. \bCC\b, \bCCFLAGS\b, \bHOSTTYPE\b and \bSHELL\b may be set
- by explicit command argument assignments to override the defaults.]
- [+?Packages are composed of components. Each component is built and
- installed by an \bast\b \bnmake\b(1) makefile. Each package is also
- described by an \bnmake\b makefile that lists its components and
- provides a content description. The package makefile and component
- makefiles provide all the information required to read, write, build
- and install packages.]
- [+?Package recipients only need \bsh\b(1) and \bcc\b(1) to build and
- install source packages, and \bsh\b to install binary packages.
- \bnmake\b and \bksh93\b are required to write new packages. An
- \b$INSTALLROOT/bin/cc\b script may be supplied for some architectures.
- This script supplies a reasonable set of default options for compilers
- that accept multiple dialects or generate multiple object/executable
- formats.]
- [+?The command arguments are composed of a sequence of words: zero or
- more \aqualifiers\a, one \aaction\a, and zero or more action-specific
- \aarguments\a, and zero or more \aname=value\a definitions. \apackage\a
- names a particular package. The naming scheme is a \b-\b separated
- hierarchy; the leftmost parts describe ownership, e.g.,
- \bgnu-fileutils\b, \bast-base\b. If no packages are specified then all
- packages are operated on. \boptget\b(3) documentation options are also
- supported. The default with no arguments is \bhost type\b.]
- [+?The qualifiers are:]
- {
- [+authorize \aname\a?Remote authorization user name or license
- acceptance phrase.]
- [+debug|environment?Show environment and actions but do not
- execute.]
- [+flat?Collapse \b$INSTALLROOT\b { bin fun include lib } onto
- \b$PACKAGEROOT\b.]
- [+force?Force the action to override saved state.]
- [+never?Run make -N and show other actions.]
- [+only?Only operate on the specified packages.]
- [+password \apassword\a?Remote authorization or license
- acceptance password.]
- [+quiet?Do not list captured action output.]
- [+show?Run make -n and show other actions.]
- [+verbose?Provide detailed action output.]
- [+DEBUG?Trace the package script actions in detail.]
- }
- [+?The actions are:]
- {
- [+admin\b [\ball\b]] [\bdb\b \afile\a]] [\bon\b \apattern\a]][\aaction\a ...]]?Apply
- \aaction\a ... to the hosts listed in \afile\a. If \afile\a is
- omitted then \badmin.db\b is assumed. The caller must have
- \brcp\b(1) and \brsh\b(1) or \bscp\b(1) and \bssh\b(1) access
- to the hosts. Output for \aaction\a is saved per-host in the
- file \aaction\a\b.log/\b\ahost\a. Logs can be viewed by
- \bpackage admin\b [\bon\b \ahost\a]] \bresults\b [\aaction\a]].
- By default only local PACKAGEROOT hosts are selected from
- \afile\a; \ball\b selects all hosts. \bon\b \apattern\a selects
- only hosts matching the \b|\b separated \apattern\a. \afile\a
- contains four types of lines. Blank lines and lines beginning
- with \b#\b are ignored. Lines starting with \aid\a=\avalue\a
- are variable assignments. Set admin_ping to local conventions
- if \"'$admin_ping$'\" fails. If a package list is not specified
- on the command line the \aaction\a applies to all packages; a
- variable assignment \bpackage\b=\"\alist\a\" applies \aaction\a
- to the packages in \alist\a for subsequent hosts in \afile\a.
- The remaining line type is a host description consisting of 6
- tab separated fields. The first 3 are mandatory; the remaining
- 3 are updated by the \badmin\b action. \afile\a is saved in
- \afile\a\b.old\b before update. The fields are:]
- {
- [+hosttype?The host type as reported by
- \"\bpackage\b\".]
- [+[user@]]host?The host name and optionally user name
- for \brcp\b(1) and \brsh\b(1) access.]
- [+[remote::[[master]]::]]]]PACKAGEROOT?The absolute remote package
- root directory and optionally the remote protocol (rsh
- or ssh) if the directory is on a different server than
- the master package root directory. If
- \blib/package/admin/'$admin_env$'\b exists under this
- directory then it is sourced by \bsh\b(1) before
- \aaction\a is done. If this field begins with \b-\b
- then the host is ignored. If this field contains \b:\b
- then \bditto\b(1) is used to sync the remote \bsrc\b
- directory hierarchy to the local one. If [\amaster\a]]:
- is specified then the sync is deferred to the \amaster\a
- host. If \amaster\a is omitted (two :) then the sync is
- disabled. These directories must exist on the remote side:
- \blib/package\b, \bsrc/cmd\b, \bsrc/lib\b.]
- [+date?\aYYMMDD\a of the last action.]
- [+time?Elapsed wall time for the last action.]
- [+M T W?The \badmin\b action \bmake\b, \btest\b and
- \bwrite\b action error counts. A non-numeric value in
- any of these fields disables the corresponding action.]
- [+owner?The owner contact information.]
- [+attributes?\aname=value\a attributes. Should at least contain
- \bcc\b=\acompiler-version\a.]
- }
- [+clean | clobber?Delete the \barch/\b\aHOSTTYPE\a hierarchy; this
- deletes all generated files and directories for \aHOSTTYPE\a.
- The hierarchy can be rebuilt by \bpackage make\b.]
- [+contents\b [ \apackage\a ... ]]?List description and
- components for \apackage\a on the standard output.]
- [+copyright\b [ \apackage\a ... ]]?List the general copyright
- notice(s) for \apackage\a on the standard output. Note that
- individual components in \apackage\a may contain additional or
- replacement notices.]
- [+export\b [ \avariable\a ...]]?List \aname\a=\avalue\a for
- \avariable\a, one per line. If the \bonly\b attribute is
- specified then only the variable values are listed. If no
- variables are specified then \b'$env$'\b are assumed.]
- [+help\b [ \aaction\a ]]?Display help text on the standard
- error (standard output for \aaction\a).]
- [+host\b [ \aattribute\a ... ]]?List
- architecture/implementation dependent host information on the
- standard output. \btype\b is listed if no attributes are
- specified. Information is listed on a single line in
- \aattribute\a order. The attributes are:]
- {
- [+canon \aname\a?An external host type name to be
- converted to \bpackage\b syntax.]
- [+cpu?The number of cpus; 1 if the host is not a
- multiprocessor.]
- [+name?The host name.]
- [+rating?The cpu rating in pseudo mips; the value is
- useful useful only in comparisons with rating values of
- other hosts. Other than a vax rating (mercifully) fixed
- at 1, ratings can vary wildly but consistently from
- vendor mips ratings. \bcc\b(1) may be required to
- determine the rating.]
- [+type?The host type, usually in the form
- \avendor\a.\aarchitecture\a, with an optional trailing
- -\aversion\a. The main theme is that type names within
- a family of architectures are named in a similar,
- predictable style. OS point release information is
- avoided as much as possible, but vendor resistance to
- release incompatibilities has for the most part been
- futile.]
- }
- [+html\b [ \aaction\a ]]?Display html help text on the standard
- error (standard output for \aaction\a).]
- [+install\b [ \aarchitecture\a ... ]] \adirectory\a [ \apackage\a ... ]]?Copy
- the package binary hierarchy to \adirectory\a. If
- \aarchitecture\a is omitted then all architectures are
- installed. If \bflat\b is specified then exactly one
- \aarchitecture\a must be specified; this architecture will be
- installed in \adirectory\a without the \barch/\b\aHOSTTYPE\a
- directory prefixes. Otherwise each architecture will be
- installed in a separate \barch/\b\aHOSTTYPE\a subdirectory of
- \adirectory\a. The \aarchitecture\a \b-\b names the current
- architecture. \adirectory\a must be an existing directory. If
- \apackage\a is omitted then all binary packages are installed.
- This action requires \bnmake\b.]
- [+license\b [ \apackage\a ... ]]?List the source license(s) for
- \apackage\a on the standard output. Note that individual
- components in \apackage\a may contain additional or replacement
- licenses.]
- [+list\b [ \apackage\a ... ]]?List the name, version and
- prerequisites for \apackage\a on the standard output.]
- [+make\b [ \apackage\a ]] [ \aoption\a ... ]] [ \atarget\a ... ]]?Build
- and install. The default \atarget\a is \binstall\b, which makes
- and installs \apackage\a. If the standard output is a terminal
- then the output is also captured in
- \b$INSTALLROOT/lib/package/gen/make.out\b. The build is done in
- the \b$INSTALLROOT\b directory tree viewpathed on top of the
- \b$PACKAGEROOT\b directory tree. If \bflat\b is specified then
- the \b$INSTALLROOT\b { bin fun include lib } directories are
- linked to the same directories in the package root. Only one
- architecture may be \bflat\b. Leaf directory names matching the
- \b|\b-separated shell pattern \b$MAKESKIP\b are ignored. The
- \bview\b action is done before making. \aoption\a operands are
- passed to the underlying make command.]
- [+read\b [ \apackage\a ... | \aarchive\a ... ]]?Read the named
- package or archive(s). Must be run from the package root
- directory. Archives are searched for in \b.\b and
- \blib/package/tgz\b. Each package archive is read only once.
- The file \blib/package/tgz/\b\apackage\a[.\atype\a]]\b.tim\b
- tracks the read time. See the \bwrite\b action for archive
- naming conventions. Text file archive member are assumed to be
- ASCII or UTF-8 encoded.]
- [+regress?\bdiff\b(1) the current and previous \bpackage test\b
- results.]
- [+release\b [ [\aCC\a]]\aYY-MM-DD\a [ [\acc\a]]\ayy-mm-dd\a ]]]] [ \apackage\a ]]?Display
- recent changes for the date range [\aCC\a]]\aYY-MM-DD\a (up to
- [\acc\a]]\ayy-mm-dd\a.), where \b-\b means lowest (or highest.)
- If no dates are specified then changes for the last 4 months
- are listed. \apackage\a may be a package or component name.]
- [+remove\b [ \apackage\a ]]?Remove files installed for
- \apackage\a.]
- [+results\b [ \bfailed\b ]] [ \bpath\b ]] [ \bold\b ]] [\bmake\b | \btest\b | \bwrite\b ]]?List
- results and interesting messages captured by the most recent
- \bmake\b (default), \btest\b or \bwrite\b action. \bold\b
- specifies the previous results, if any (current and previous
- results are retained.) \b$HOME/.pkgresults\b, if it exists,
- must contain an \begrep\b(1) expression of result lines to be
- ignored. \bfailed\b lists failures only and \bpath\b lists the
- results file path name only.]
- [+setup\b [ beta ]] [ binary ]] [ source ]] [ \aarchitecture\a ... ]] [ \aurl\a ]] [ \apackage\a ... ]]?This
- action initializes the current directory as a package root, runs the
- \bupdate\b action to download new or out of date packages, and runs the
- \bread\b action on those packages. If \bflat\b is specified then the
- \b$INSTALLROOT\b { bin fun include lib } directories are linked to the
- same directories in the package root. Only one architecture may be
- \bflat\b. See the \bupdate\b and \bread\b action descriptions for
- argument details.]
- [+test\b [ \apackage\a ]]?Run the regression tests for
- \apackage\a. If the standard output is a terminal then the
- output is also captured in
- \b$INSTALLROOT/lib/package/gen/test.out\b. In general a package
- must be made before it can be tested. Components tested with
- the \bregress\b(1) command require \bksh93\b. If \bonly\b is
- also specified then only the listed package components are
- tested, otherwise the closure of the components is tested.]
- [+update\b [ beta ]] [ binary ]] [ source ]] [\aarchitecture\a ... ]] [ \aurl\a ]] [ \apackage\a ... ]]?Download
- the latest release of the selected and required packages from \aurl\a
- (e.g., \bhttp://www.research.att.com/sw/download\b) into the directory
- \b$PACKAGEROOT/lib/package/tgz\b. \bbeta\b accesses beta packages;
- download these at your own risk. If \aarchitecture\a is omitted then
- only architectures already present in the \btgz\b directory will be
- downloaded. If \aarchitecture\a is \b-\b then all posted architectures
- will be downloaded. If \aurl\a matches \b*.url\b then it is interpreted
- as a file containing shell variable assignments for \burl\b,
- \bauthorize\b and \bpassword\b. If \aurl\a is omitted then the
- definitions for \burl\b, \bauthorize\b and \bpassword\b in
- \b$PACKAGEROOT/lib/package/tgz/default.url\b, if it exists, are used.
- If \b$PACKAGEROOT/lib/package/tgz/default.url\b does not exist then it
- is initialized with the current \burl\b, \bauthorize\b and \bpassword\b
- values and read permission for the current user only. If \apackage\a is
- omitted then only packages already present in the tgz directory will be
- downloaded. If \apackage\a is \b-\b then all posted packages will be
- downloaded. If \bsource\b and \bbinary\b are omitted then both source
- and binary packages will be downloaded. If \bonly\b is specified then
- only the named packages are updated; otherwise the closure of required
- packages is updated. This action requires \bwget\b(1), \blynx\b(1),
- \bcurl\b(1) or a shell that supports io to
- \b/dev/tcp/\b\ahost\a/\aport\a.]
- [+use\b [ \auid\a | \apackage\a | . [ 32 | 64 ]] | 32 | 64 | - ]] [ command ...]]?Run
- \acommand\a, or an interactive shell if \acommand\a is omitted,
- with the environment initialized for using the package (can you
- say \ashared\a \alibrary\a or \adll\a without cussing?) If
- \auid\a or \apackage\a or \a.\a is specified then it is used
- to determine a \b$PACKAGEROOT\b, possibly different from
- the current directory. For example, to try out bozo`s package:
- \bpackage use bozo\b. The \buse\b action may be run from any
- directory. If the file \b$INSTALLROOT/lib/package/profile\b is
- readable then it is sourced to initialize the environment. 32 or 64
- implies \b$PACKAGEROOT\b of . and specifies the target architecture
- word size (which may be silently ignored.)]
- [+verify\b [ \apackage\a ]]?Verify installed binary files
- against the checksum files in
- \b$INSTALLROOT/lib/\b\apackage\a\b/gen/*.sum\b. The checksum
- files contain mode, user and group information. If the checksum
- matches for a given file then the mode, user and group are
- changed as necessary to match the checksum entry. A warning is
- printed on the standard error for each mismatch. Requires the
- \bast\b package \bcksum\b(1) command.]
- [+view\b?Initialize the architecture specific viewpath
- hierarchy. If \bflat\b is specified then the \b$INSTALLROOT\b {
- bin fun include lib } directories are linked to the same
- directories in the package root. Only one architecture may be
- \bflat\b. The \bmake\b action implicitly calls this action.]
- [+write\b [\aformat\a]] \atype\a ... [ \apackage\a ...]]?Write
- a package archive for \apackage\a. All work is done in the
- \b$PACKAGEROOT/lib/package\b directory. \aformat\a-specific
- files are placed in the \aformat\a subdirectory. A
- \apackage\a[.\atype\a]]\b.tim\b file in this directory tracks
- the write time and prevents a package from being read in the
- same root it was written. If more than one file is generated
- for a particular \aformat\a then those files are placed in the
- \aformat\a/\apackage\a subdirectory. File names in the
- \aformat\a subdirectory will contain the package name, a
- \ayyyy-mm-dd\a date, and for binary packages, \aHOSTTYPE\a. If
- \apackage\a is omitted then an ordered list of previously
- written packages is generated. If \bonly\b is specified then
- only the named packages will be written; otherwise prerequisite
- packages are written first. Package components must be listed
- in \apackage\a\b.pkg\b. \aformat\a may be one of:]
- {
- [+cyg?Generate a \bcygwin\b package.]
- [+exp?Generate an \bexptools\b maintainer source
- archive and \aNPD\a file, suitable for \bexpmake\b(1)]
- [+lcl?Generate a package archive suitable for
- restoration into the local source tree (i.e., the
- source is not annotated for licencing.)]
- [+pkg?Generate a \bpkgmk\b(1) package suitable for
- \bpkgadd\b(1).]
- [+rpm?Generate an \brpm\b(1) package.]
- [+tgz?Generate a \bgzip\b(1) \btar\b(1) package
- archive. This is the default.]
- [+tst?Generate a \btgz\b format package archive in the
- \btst\b subdirectory. Version state files are not updated.]
- }
- [+?\btype\b specifies the package type which must be one of
- \bsource\b, \bbinary\b or \bruntime\b. A source package
- contains the source needed to build the corresponding binary
- package. A binary package includes the libraries and headers
- needed for compiling and linking against the public interfaces.
- A runtime package contains the commands and required dynamic
- libraries.]
- [+?A package may be either a \bbase\b or \bdelta\b. A base
- package contains a complete copy of all components. A delta
- package contains only changes from a previous base package.
- Delta recipients must have the \bast\b \bpax\b(1) command (in
- the \bast-base\b package.) If neither \bbase\b nor \bdelta\b is
- specified, then the current base is overwritten if there are no
- deltas referring to the current base. Only the \btgz\b and
- \blcl\b formats support \bdelta\b. If \bbase\b is specified
- then a new base and two delta archives are generated: one delta
- to generate the new base from the old, and one delta to
- generate the old base from the new; the old base is then
- removed. If \bdelta\b is specified then a new delta referring
- to the current base is written.]
- [+?\apackage\a\b.pkg\b may reference other packages. By default
- a pointer to those packages is written. The recipient \bpackage
- read\b will then check that all required packages have been
- downloaded. If \bclosure\b is specified then the components for
- all package references are included in the generated package.
- This may be useful for \blcl\b and versioning.]
- [+?All formats but \blcl\b annotate each \bsource\b file (not
- already annotated) with a license comment as it is written to
- the package archive using \bproto\b(1).]
- }
- [+DETAILS?The package directory hierarchy is rooted at
- \b$PACKAGEROOT\b. All source and binaries reside under this tree. A two
- level viewpath is used to separate source and binaries. The top view is
- architecture specific, the bottom view is shared source. All building
- is done in the architecture specific view; no source view files are
- intentionally changed. This means that many different binary
- architectures can be made from a single copy of the source.]
- [+?Independent \b$PACKAGEROOT\b hierarchies can be combined by
- appending \b$INSTALLROOT:$PACKAGEROOT\b pairs to \bVPATH\b. The
- \bVPATH\b viewing order is from left to right. Each \b$PACKAGEROOT\b
- must have a \b$PACKAGEROOT/lib/package\b directory.]
- [+?Each package contains one or more components. Component source for
- the \afoo\a command is in \b$PACKAGEROOT/src/cmd/\b\afoo\a, and source
- for the \abar\a library is in \b$PACKAGEROOT/src/lib/lib\b\abar\a. This
- naming is for convenience only; the underlying makefiles handle
- inter-component build order. The \bINIT\b component, which contains
- generic package support files, is always made first, then the
- components named \bINIT\b*, then the component order determined by the
- closure of component makefile dependencies.]
- [+?\b$PACKAGEROOT/lib/package\b contains package specific files. The
- package naming convention is \agroup\a[-\apart\a]]; e.g., \bast-base\b,
- \bgnu-fileutils\b. The *\b.pkg\b files are ast \bnmake\b(1) makefiles
- that contain the package name, package components, references to other
- packages, and a short package description. *\b.pkg\b files are used by
- \bpackage write\b to generate new source and binary packages.]
- [+?\b$PACKAGEROOT/lib/package/\b\agroup\a\b.lic\b files contain license
- information that is used by the \bast\b \bproto\b(1) and \bnmake\b(1)
- commands to generate source and binary license strings. \agroup\a is
- determined by the first \b:PACKAGE:\b operator name listed in the
- component \bnmake\b makefile. \agroup\a\b.lic\b files are part of the
- licensing documentation. Each component may have its own \bLICENSE\b file
- that overrides the \agroup\a\b.lic\b file. The full text of the licenses
- are in the \b$PACKAGEROOT/lib/package/LICENSES\b and
- \b$INSTALLROOT/lib/package/LICENSES\b directories.]
- [+?A few files are generated in \b$PACKAGEROOT/lib/package/gen\b and
- \b$INSTALLROOT/lib/package/gen\b. \apackage\a\b.ver\b contains one line
- consisting of \apackage version release\a \b1\b for the most recent
- instance of \apackage\a read into \b$PACKAGEROOT\b, where \apackage\a
- is the package name, \aversion\a is the \aYYYY-MM-DD\a base version,
- and \arelease\a is \aversion\a for the base release or \aYYYY-MM-DD\a
- for delta releases. \apackage\a\b.req\b contains *\b.ver\b entries for
- the packages required by \apackage\a, except that the fourth field is
- \b0\b instead of \b1\b. All packages except \bINIT\b require the
- \bINIT\b package. A simple sort of \apackage\a\b.pkg\b and *\b.ver\b
- determines if the required package have been read in. Finally,
- \apackage\a\b.README\b and \apackage\a\a.html\b contain the README text
- for \apackage\a and all its components. Included are all changes added
- to the component \bRELEASE\b, \bCHANGES\b or \bChangeLog\b files dated
- since the two most recent base releases. Component \bRELEASE\b files
- contain tag lines of the form [\aYY\a]]\aYY-MM-DD\a [ \atext\a ]] (or
- \bdate\b(1) format dates) followed by README text, in reverse
- chronological order (newer entries at the top of the file.) \bpackage
- release\b lists this information, and \bpackage contents ...\b lists
- the descriptions and components.]
- [+?\b$HOSTYPE\b names the current binary architecture and is determined
- by the output of \bpackage\b (no arguments.) The \b$HOSTTYPE\b naming
- scheme is used to separate incompatible executable and object formats.
- All architecture specific binaries are placed under \b$INSTALLROOT\b
- (\b$PACKAGEROOT/arch/$HOSTTYPE\b.) There are a few places that match
- against \b$HOSTTYPE\b when making binaries; these are limited to
- makefile compiler workarounds, e.g., if \b$HOSTTYPE\b matches \bhp.*\b
- then turn off the optimizer for these objects. All other architecture
- dependent logic is handled either by the \bast\b \biffe\b(1) command or
- by component specific configure scripts. Explicit \b$HOSTYPE\b
- values matching *,*cc*[,-*,...]] optionally set the default \bCC\b and
- \bCCFLAGS\b. This is handy for build farms that support different
- compilers on the same architecture.]
- [+?Each component contains an \bast\b \bnmake\b(1) makefile (either
- \bNmakefile\b or \bMakefile\b) and a \bMAM\b (make abstract machine)
- file (\bMamfile\b.) A Mamfile contains a portable makefile description
- that is used by \bmamake\b(1) to simulate \bnmake\b. Currently there is
- no support for old-make/gnu-make makefiles; if the binaries are just
- being built then \bmamake\b will suffice; if source or makefile
- modifications are anticipated then \bnmake\b (in the \bast-base\b
- package) should be used. Mamfiles are automatically generated by
- \bpackage write\b.]
- [+?Most component C source is prototyped. If \b$CC\b (default value
- \bcc\b) is not a prototyping C compiler then \bpackage make\b runs
- \bproto\b(1) on portions of the \b$PACKAGEROOT/src\b tree and places
- the converted output files in the \b$PACKAGEROOT/proto/src\b tree.
- Converted files are then viewpathed over the original source.
- \bproto\b(1) converts an ANSI C subset to code that is compatible with
- K&R, ANSI, and C++ dialects.]
- [+?All scripts and commands under \b$PACKAGEROOT\b use \b$PATH\b
- relative pathnames (via the \bast\b \bpathpath\b(3) function); there
- are no embedded absolute pathnames. This means that binaries generated
- under \b$PACKAGEROOT\b may be copied to a different root; users need
- only change their \b$PATH\b variable to reference the new installation
- root \bbin\b directory. \bpackage install\b installs binary packages in
- a new \b$INSTALLROOT\b.]
- [ qualifier ... ] [ action ] [ arg ... ] [ n=v ... ]
- [+SEE ALSO?\bautoconfig\b(1), \bcksum\b(1), \bexecrate\b(1), \bexpmake\b(1),
- \bgzip\b(1), \bmake\b(1), \bmamake\b(1), \bnmake\b(1), \bpax\b(1),
- \bpkgadd\b(1), \bpkgmk\b(1), \bproto\b(1), \bratz\b(1), \brpm\b(1),
- \bsh\b(1), \btar\b(1), \boptget\b(3)]
- '
- case $* in
- help) set -- --man ;;
- esac
- while getopts -a $command "$USAGE" OPT
- do :
- done
- shift $OPTIND-1
- ;;
- esac
- # check the args
- case $AR in
- '') AR=ar ;;
- esac
- case $CC in
- '') CC=cc ;;
- esac
- case $LD in
- '') LD=ld ;;
- esac
- case $NM in
- '') NM=nm ;;
- esac
- action=
- admin_all=1
- admin_on=
- authorize=
- bit=
- exec=
- flat=0
- force=0
- global=
- hi=
- html=0
- ifs=${IFS-'
- '}
- lo=
- make=
- makeflags='-K'
- nmakeflags=
- nmakesep=
- nl="
- "
- noexec=
- only=0
- output=
- package_src=
- password=
- quiet=0
- show=:
- tab=" "
- verbose=0
- AUTHORIZE=
- DEBUG=
- HURL=
- PROTOROOT=-
- SHELLMAGIC=-
- unset FIGNORE BINDIR DLLDIR ETCDIR FUNDIR INCLUDEDIR LIBDIR LOCALEDIR MANDIR SHAREDIR 2>/dev/null || true
- while :
- do case $# in
- 0) set host type ;;
- esac
- case $1 in
- admin|clean|clobber|contents|copyright|export|host|install|license|list|make|read|regress|release|remove|results|setup|test|update|use|verify|view|write|TEST)
- action=$1
- shift
- break
- ;;
- authorize)
- case $# in
- 1) echo $command: $1: authorization user name argument expected >&2; exit 1 ;;
- esac
- shift
- authorize=$1
- shift
- continue
- ;;
- debug|environment)
- exec=echo make=echo show=echo
- ;;
- flat) flat=1
- ;;
- force) force=1
- ;;
- never) exec=echo noexec=-N
- ;;
- only) only=1
- ;;
- password)
- case $# in
- 1) echo $command: $1: authorization password argument expected >&2; exit 1 ;;
- esac
- shift
- password=$1
- shift
- continue
- ;;
- quiet) quiet=1
- ;;
- show) exec=echo noexec=-n
- ;;
- verbose)verbose=1
- ;;
- DEBUG) DEBUG=1
- PS4='+$LINENO:$SECONDS+ '
- set -x
- ;;
- help|HELP|html|man|--[?m]*)
- case $1 in
- help) code=0
- case $2 in
- '') exec 1>&2 ;;
- esac
- ;;
- html) code=0 html=1
- ;;
- *) code=2
- exec 1>&2
- ;;
- esac
- case $html in
- 1) bO="<HTML>
- <HEAD>
- <TITLE>$2 package installation instructions</TITLE>
- <HEAD>
- <BODY bgcolor=white link=teal vlink=dimgray>"
- eO='</BODY>
- </HTML>'
- bH="<CENTER><H3><FONT face=courier color=red>"
- eH='</FONT></H3></CENTER>'
- bP='<P>'
- bL='<P><TABLE cellpadding=0 cellspacing=2>'
- bL2='<P><TABLE border=0 cellpadding=0 cellspacing=2>'
- eL='</TABLE><P>'
- bT='<TR><TD align=right valign=top><B>'
- bD='</B></TD><TD align=left>' eD='</TD></TR>'
- bB='<B>' eB='</B>'
- bI='<I>' eI='</I>'
- bX='<PRE>' eX='</PRE>'
- bF='<TT>' eF='</TT>'
- Camp='&'
- Mcurl='<A href=../../man/man1/curl.html>curl</A>(1)'
- Mdate='<A href=../../man/man1/date.html>date</A>(1)'
- Mfile='<A href=../../man/man1/file.html>file</A>(1)'
- Mgunzip='<A href=../../man/man1/gzip.html>gunzip</A>(1)'
- Mhurl='<A href=../../man/man1/hurl.html>hurl</A>(1)'
- Mlynx='<A href=../../man/man1/lynx.html>lynx</A>(1)'
- Mnmake='<A href=../../man/man1/nmake.html>nmake</A>(1)'
- Mpackage='<A href=../../man/man1/package.html>package</A>(1)'
- Mproto='<A href=../../man/man1/proto.html>proto</A>(1)'
- Mratz='<A href=../../man/man1/ratz.html>ratz</A>'
- Mtar='<A href=../../man/man1/tar.html>tar</A>(1)'
- Mwget='<A href=../../man/man1/wget.html>wget</A>(1)'
- ;;
- *) bO='' eO=''
- bH='' eH=':'
- bP=''
- bL='' eL=''
- bL2=''
- bT=' '
- bD=' ' eD=''
- bB='' eB=''
- bI='' eI=''
- bX='' eX=''
- bF='"' eF='"'
- Camp='&'
- Mcurl='curl(1)'
- Mdate='date(1)'
- Mfile='file(1)'
- Mgunzip='gunzip(1)'
- Mhurl='hurl(1)'
- Mlynx='lynx(1)'
- Mnmake='nmake(1)'
- Mpackage='package(1)'
- Mproto='proto(1)'
- Mratz='ratz'
- Mtar='tar(1)'
- Mwget='wget(1)'
- ;;
- esac
- case $2 in
- binary) echo "${bO}
- ${bH}Binary Package Installation Instructions${eH}
- ${bL}
- ${bT}(1)${bD}Do not install packages as ${bI}root/super-user${eI}. Although some components may
- have setuid executables, few must be owned by ${bI}root${eI}. These are best
- changed manually when the security implications are understood.${eD}
- ${bT}(2)${bD}Choose a package root directory and cd to it. This will be a local work
- area for all packages.${eD}
- ${bT}(3)${bD}These instructions bypass the ${bI}click to download${eI} package links on the
- download site. If you already clicked, or if your system does not have
- ${Mcurl}, ${Mhurl}, ${Mlynx} or ${Mwget} then use the alternate instructions
- for (3),(4),(5) in plan ${bB}B${eB} below. Plan ${bB}B${eB} installs the ${Mhurl}
- script which works with ksh and modern bash. The top level URL is:${bX}
- URL=http://www.research.att.com/sw/download${eX}${eD}
- ${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then run:${bX}
- test -d bin || mkdir bin
- url=\$URL/package
- (wget -O - \$url||curl -L \$url||hurl \$url) > bin/package
- chmod +x bin/package${eX}${eD}
- ${bT}(5)${bD}Determine the list of package names you want from the download site, then
- use the ${Mpackage} command to do the actual download:${bX}
- bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
- setup binary \$URL ${bI}PACKAGE${eI} ...${eX}
- (Refer to the ${bB}AUTHORIZATION${eB} paragraph on the main download page for
- ${bI}NAME${eI}/${bI}PASSWORD${eI} details.) This downloads the closure of the latest
- binary package(s); covered and up-to-date packages are not downloaded again unless
- ${bB}package force ...${eB} is specified. Package content is verified using ${bB}${checksum}${eB}.
- If the package root will contain only one architecture then you can install in ${bB}bin${eB} and
- ${bB}lib${eB} instead of ${bB}arch/${eB}${bI}HOSTTYPE${eI}${bB}/bin${eB} and ${bB}arch/${eB}${bI}HOSTTYPE${eI}${bB}/lib${eB} by running this
- instead:${bX}
- bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
- flat setup binary \$URL ${bB}PACKAGE${eB} ...${eX}
- To update the same packages from the same URL run:${bX}
- bin/package setup binary${eX}${eD}
- ${bT}(6)${bD}The packaged binaries are position independent, i.e., they do not
- contain hard-coded paths. However, commands with related files, like
- ${Mfile} and ${Mnmake}, require the path of the bin directory to be
- exported in ${bB}PATH${eb}.${eD}
- ${bT}(7)${bD}You can run the binaries directly from the package root, or you can
- install them in a public root (requires the ${bI}AT${Camp}T${eI} ${Mnmake} command):${bX}
- bin/package flat install ${bI}DIRECTORY PACKAGE${eI}${eX}
- This will install in ${bI}DIRECTORY${eI}${bB}/bin${eB} and ${bI}DIRECTORY${eI}${bB}/lib${eB}. If you want to
- preserve the ${bB}arch/${eB}${bI}HOSTTYPE${eI} hierarchy under ${bI}DIRECTORY${eI} then omit the
- ${bB}flat${eB} argument. If you don't have ${Mnmake} then the following will do a
- flat install:${bX}
- cd \$INSTALLROOT
- cp -p -r bin lib include ${bI}DIRECTORY${eI}${eX}${eD}
- ${bT}(8)${bD}To summarize, after the first time, the download cycle for the latest
- binary release is:${bX}
- bin/package setup binary${eX}${eD}${eL}
- ${bH}Binary Package Installation Instructions -- Plan B${eH}
- ${bL}
- ${bT}(3)${bD}Create the subdirectory ${bB}lib/package/tgz${eB} and download all package archives
- into that directory.${eD}
- ${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then manually read the ${bB}INIT${eB}
- binary package:${bX}
- gunzip < lib/package/tgz/INIT.${bI}YYYY-MM-DD.HOSTTYPE${eI}.tgz |
- ${TAR} ${TARFLAGS}f -${eX}
- Note that some browsers automatically unzip downloaded without warning.
- If the gunzip fails try:
- ${TAR} ${TARFLAGS}f -${eX} lib/package/tgz/INIT.${bI}YYYY-MM-DD.HOSTTYPE${eI}.tgz
- If your system does not have ${Mtar} or ${Mgunzip} then download the ${Mratz}
- binary package:${bX}
- mkdir bin
- cp lib/package/tgz/ratz.${bI}YYYY-MM-DD.HOSTTYPE${eI}.exe bin/ratz
- chmod +x bin/ratz
- bin/ratz -lm < lib/package/tgz/INIT.${bI}YYYY-MM-DD/HOSTTYPE${eI}.tgz
- ${bT}(5)${bD}Read all unread package archive(s):${bX}
- bin/package read${eX}
- Both source and binary packages will be read by this step.${eD}${eL}${eO}"
- ;;
- intro) echo "${bO}
- ${bH}Package Hierarchy Details${eH}
- ${bP}
- The package directory hierarchy is rooted at ${bB}\$PACKAGEROOT${eB}. All source and
- binaries reside under this tree. A two level viewpath is used to separate
- source and binaries. The top view is architecture specific, the bottom view
- is shared source. All building is done in the architecture specific view;
- no source view files are intentionally changed. This means that many
- different binary architectures can be made from a single copy of the source.
- ${bP}
- Each package contains one or more components. Component source for the ${bI}FOO${eI}
- command is in ${bB}\$PACKAGEROOT/src/cmd/${eB}${bI}FOO${eI}, and source for the ${bI}BAR${eI} library is
- in ${bB}\$PACKAGEROOT/src/lib/lib${eB}${bI}BAR${eI}. This naming is for convenience only; the
- underlying makefiles handle inter-component build order. The ${bB}INIT${eB} component,
- which contains generic package support files, is always made first, then the
- components named ${bB}INIT${eB}*, then the order determined by the closure of component
- makefile dependencies.
- ${bP}
- ${bB}\$PACKAGEROOT/lib/package${eB} contains package specific files. The package naming
- convention is ${bI}GROUP${eI}[${bI}-PART${eI}]; e.g., ${bB}ast-base${eB}, ${bB}gnu-fileutils${eB}. The *${bB}.pkg${eB} files
- are ${bB}ast${eB} ${Mnmake} makefiles that contain the package name, package components,
- references to other packages, and a short package description. *${bB}.pkg${eB} files
- are used by ${bF}package write${eF} to generate new source and binary packages.
- ${bP}
- ${bB}\$PACKAGEROOT/lib/package/${eB}${bI}GROUP${eI}${bB}.lic${eB} files contain license information that
- is used by the ${bB}ast${eB} ${Mproto} and ${Mnmake} commands to generate source and
- binary license strings. ${bI}GROUP${eI} is determined by the first ${bB}:PACKAGE:${eB} operator
- name listed in the component ${bB}nmake${eB} makefile. ${bI}GROUP${eI}${bB}.lic${eB} files are part of the
- licensing documentation. Each component may have its own ${bB}LICENSE${eB} file that
- overrides the ${bI}GROUP${eI}${bB}.lic${eB} file. The full text of the licenses are in the
- ${bB}\$PACKAGEROOT/lib/package/LICENSES${eB} and ${bB}\$INSTALLROOT/lib/package/LICENSES${eB}
- directories.
- ${bP}
- A few files are generated in ${bB}\$PACKAGEROOT/lib/package/gen${eB} and
- ${bB}\$INSTALLROOT/lib/package/gen${eB}. ${bI}PACKAGE${eI}${bB}.ver${eB} contains one line consisting of${bX}
- ${bI}PACKAGE VERSION RELEASE${eI} 1${eX}
- for the most recent instance of ${bI}PACKAGE${eI} read into ${bB}\$PACKAGEROOT${eB}, where
- ${bI}PACKAGE${eI} is the package name, ${bI}VERSION${eI} is the ${bI}YYYY-MM-DD${eI} base version,
- and ${bI}RELEASE${eI} is ${bI}VERSION${eI} for the base release or ${bI}YYYY-MM-DD${eI} for delta releases.
- ${bI}PACKAGE${eI}${bB}.req${eB} contains *${bB}.ver${eB} entries for the packages required by
- ${bI}PACKAGE${eI}, except that the fourth field is 0 instead of 1. All packages
- except ${bB}INIT${eB} and ${Mratz} require the ${bB}INIT${eB} package. A simple sort of ${bI}PACKAGE${eI}${bB}.pkg${eB}
- and *${bB}.ver${eB} determines if the required package have been read in. Finally,
- ${bI}PACKAGE${eI}${bB}.README${eB} contains the ${bB}README${eB} text for ${bI}PACKAGE${eI} and all its
- components. Included are all changes added to the component ${bB}RELEASE${eB},
- ${bB}CHANGES${eB} or ${bB}ChangeLog${eB} files dated since the two most recent base
- releases. Component ${bB}RELEASE${eB} files contain tag lines of the form
- [${bI}CC${eI}]${bI}YY-MM-DD${eI} [ ${bI}TEXT${eI} ] (or ${Mdate} format dates) followed by README
- text, in reverse chronological order (newer entries at the top of the
- file.) ${bF}package release${eF} generates this information, and
- ${bF}package contents ...${eF} lists the descriptions and components.
- ${bP}
- ${bB}\$HOSTYPE${eB} names the current binary architecture and is determined by the
- output of ${bF}package${eF} (no arguments.) The ${bB}\$HOSTTYPE${eB} naming scheme is used
- to separate incompatible executable and object formats. All architecture
- specific binaries are placed under ${bB}\$INSTALLROOT${eB} (${bB}\$PACKAGEROOT/arch/\$HOSTTYPE${eB}.)
- There are a few places that match against ${bB}\$HOSTTYPE${eB} when making binaries; these
- are limited to makefile compiler workarounds, e.g., if ${bB}\$HOSTTYPE${eB} matches
- 'hp.*' then turn off the optimizer for these objects. All other architecture
- dependent logic is handled either by ${bB}\$INSTALLROOT/bin/iffe${eB} or by component
- specific configure scripts. Explicit ${bB}\$HOSTYPE${eB} values matching *,*cc*[,-*,...]
- optionally set the default ${bB}CC${eB} and ${bB}CCFLAGS${eB}. This is handy for build
- farms that support different compilers on the same architecture.
- ${bP}
- Each component contains an ${bB}ast${eB} ${Mnmake} makefile (either ${bB}Nmakefile${eB} or ${bB}Makefile${eB})
- and a ${bI}MAM${eI} (make abstract machine) file (${bB}Mamfile${eB}.) A Mamfile contains a portable
- makefile description that is used by ${bB}\$INSTALLROOT/bin/mamake${eB} to simulate
- ${bB}nmake${eB}. Currently there is no support for old-make/gnu-make makefiles; if
- the binaries are just being built then ${bB}mamake${eB} will suffice; if source or
- makefile modifications are anticipated then ${bB}nmake${eB} (from the ${bB}ast-open${eB} or
- ${bB}ast-base${eB} package) should be used. Mamfiles are automatically generated by
- ${bF}package write${eF}.
- ${bP}
- Most component C source is prototyped. If ${bB}\$CC${eB} (default value ${bB}cc${eB}) is not a
- prototyping C compiler then ${bF}package make${eF} runs ${Mproto} on portions of the
- ${bB}\$PACKAGEROOT/src${eB} tree and places the converted output files in the
- ${bB}\$PACKAGEROOT/proto/src${eB} tree. Converted files are then viewpathed over the
- original source. The ${bB}ast${eB} ${Mproto} command converts an ANSI C subset to code
- that is compatible with K&R, ANSI, and C++ dialects.
- ${bP}
- All scripts and commands under ${bB}\$PACKAGEROOT${eB} use ${bB}\$PATH${eB} relative pathnames;
- there are no embedded absolute pathnames. This means that binaries generated
- under ${bB}\$PACKAGEROOT${eB} may be copied to a different root; users need only change
- their ${bB}\$PATH${eB} variable to reference the new installation root bin directory.
- ${bF}package install${eF} installs binary packages in a new ${bB}\$INSTALLROOT${eB}.
- ${eO}"
- ;;
- source) echo "${bO}
- ${bH}Source Package Installation Instructions${eH}
- ${bL}
- ${bT}(1)${bD}Do not install packages as ${bI}root/super-user${eI}. Although some components may
- have setuid executables, few must be owned by ${bI}root${eI}. These are best
- changed manually when the security implications are understood.${eD}
- ${bT}(2)${bD}Choose a package root directory and cd to it. This will be a local work
- area for all packages.
- ${bT}(3)${bD}These instructions bypass the ${bI}click to download${eI} package links on the
- download site. If you already clicked, or if your system does not have
- ${Mcurl}, ${Mhurl}, ${Mlynx} or ${Mwget} then use the alternate instructions
- for (3),(4),(5) in plan ${bB}B${eB} below. Plan ${bB}B${eB} installs the ${Mhurl}
- script which works with ksh and modern bash. The top level URL is:${bX}
- URL=http://www.research.att.com/sw/download${eX}${eD}
- ${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then run:${bX}
- test -d bin || mkdir bin
- url=\$URL/package
- (wget -O - \$url||curl -L \$url||hurl \$url) > bin/package
- chmod +x bin/package${eX}${eD}
- ${bT}(5)${bD}Determine the list of package names you want from the download site, then
- use the ${Mpackage} command to do the actual download:${bX}
- bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
- setup source \$URL ${bB}PACKAGE${eB} ...${eX}
- (Refer to the ${bB}AUTHORIZATION${eB} paragraph on the main download page for
- ${bI}NAME${eI}/${bI}PASSWORD${eI} details.) This downloads the closure of the latest
- source package(s); covered and up-to-date packages are not downloaded again unless
- ${bB}package force ...${eB} is specified. Package content is verified using ${bB}${checksum}${eB}.
- If the package root will contain only one architecture then you can install in ${bB}bin${eB} and
- ${bB}lib${eB} instead of ${bB}arch/${eB}${bI}HOSTTYPE${eI}${bB}/bin${eB} and ${bB}arch/${eB}${bI}HOSTTYPE${eI}${bB}/lib${eB} by running this
- instead:${bX}
- bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
- flat setup source \$URL ${bB}PACKAGE${eB} ...${eX}
- To update the same packages from the same URL run:${bX}
- bin/package setup source${eX}${eD}
- ${bT}(6)${bD}Build and install; all generated files are placed under ${bB}arch/${eB}${bI}HOSTTYPE${eI}
- (${bB}\$INSTALLROOT${eB}), where ${bI}HOSTTYPE${eI} is the output of ${bB}bin/package${eB} (with no
- arguments.) ${bI}name=value${eI} arguments are supported; ${bB}CC${eB} and ${bB}debug=1${eB} (compile
- with -g instead of -O) are likely candidates. The output is written to
- the terminal and captured in ${bB}\$INSTALLROOT/lib/package/gen/make.out${eB}:${bX}
- bin/package make${eX}${eD}
- ${bT}(7)${bD}List make results and interesting errors:${bX}
- bin/package results${eX}
- Run the regression tests:${bX}
- bin/package test${eX}
- List test results and errors:${bX}
- bin/package results test${eX}${eD}
- ${bT}(8)${bD}The generated binaries are position independent, i.e., they do not
- contain hard-coded paths. However, commands with related files, like
- ${Mfile} and ${Mnmake}, require the path of the bin directory to be
- exported in ${bB}PATH${eb}.${eD}
- ${bT}(9)${bD}You can run the binaries directly from the package root, or you can
- install them in a public root after you are satisfied with the make and
- test actions (requires the ${bI}AT${Camp}T${eI} ${Mnmake} command):${bX}
- bin/package flat install ${bI}DIRECTORY PACKAGE${eI}${eX}
- This will install in ${bI}DIRECTORY${eI}${bB}/bin${eB} and ${bI}DIRECTORY${eI}${bB}/lib${eB}. If you want to
- preserve the ${bB}arch/${eB}${bI}HOSTTYPE${eI} hierarchy under ${bI}DIRECTORY${eI} then omit the
- ${bB}flat${eB} argument. If you don't have ${Mnmake} then the following will do a
- flat install:${bX}
- cd \$INSTALLROOT
- cp -p -r bin lib include ${bI}DIRECTORY${eI}${eX}${eD}
- ${bT}(10)${bD}To summarize, after the first time the download, build, and test cycle
- for the latest source release is:${bX}
- bin/package setup source
- bin/package make
- bin/package test${eX}${eD}${eL}
- ${bH}Source Package Installation Instructions -- Plan B${eH}
- ${bL}
- ${bT}(3)${bD}Create the subdirectory ${bB}lib/package/tgz${eB} and download all package archives
- into that directory.${eD}
- ${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then manually read the ${bB}INIT${eB}
- source package:${bX}
- gunzip < lib/package/tgz/INIT.${bI}YYYY-MM-DD${eI}.tgz | ${TAR} ${TARFLAGS}f -${eX}
- Note that some browsers automatically unzip downloaded without warning.
- If the gunzip fails try:
- ${TAR} ${TARFLAGS}f -${eX} lib/package/tgz/INIT.${bI}YYYY-MM-DD${eI}.tgz
- If your system does not have ${Mtar} or ${Mgunzip} then download the ${Mratz}
- source package, compile it, and manually read the ${bB}INIT${eB}
- source package:${bX}
- mkdir bin
- cp lib/package/tgz/ratz.${bI}YYYY-MM-DD${eI}.c lib/package/tgz/ratz.c
- cc -o bin/ratz lib/package/tgz/ratz.c
- bin/ratz -lm < lib/package/tgz/INIT.${bI}YYYY-MM-DD${eI}.tgz
- ${bT}(5)${bD}Read all unread package archive(s):${bX}
- bin/package read${eX}
- Both source and binary packages will be read by this step.${eD}${eL}${eO}"
- ;;
- *) echo "Usage: $command [ qualifier ... ] [ action ] [ arg ... ] [ n=v ... ]
- The $command command controls source and binary packages. It must be run
- within the package root directory tree. See \"$command help intro\" for
- details. In the following, PACKAGE names either a package or a component
- within a package; if omitted, all packages are operated on. The default
- action is \"host type\".
- qualifier:
- authorize NAME Remote authorization name or license acceptance phrase.
- debug|environment Show environment and actions; do not execute.
- flat Collapse \$INSTALLROOT { bin fun include lib } onto \$PACKAGEROOT.
- force Force the action to override saved state.
- never Run make -N; otherwise show other actions.
- only Only operate on the specified packages.
- password PASSWORD Remote authorization or license acceptance password.
- quiet Do not list captured make and test action output.
- show Run make -n; otherwise show other actions.
- DEBUG Trace the package script actions in detail for debugging.
- action:
- admin [ all ] [ db FILE ] [ on PATTERN ] [ action ... ]
- Apply ACTION ... to the hosts listed in FILE. If FILE is
- omitted then "admin.db" is assumed. The caller must have rcp(1)
- and rsh(1) or scp(1) and ssh(1) access to the hosts. Output
- for the action is saved per-host in ACTION.log/HOST. Logs
- can be viewed by \"package admin [on HOST] results [ACTION]\".
- By default only local PACKAGEROOT hosts are selected from FILE;
- \"all\" selects all hosts. \"on PATTERN\" selects only
- hosts matching the | separated PATTERN. FILE contains four
- types of lines. Blank lines and lines beginning with # are
- ignored. Lines starting with id=value are variable assignments.
- Set admin_ping to local conventions if \"$admin_ping\" fails.
- If a package list is not specified on the command line the
- action applies to all packages; a variable assignment
- package=list applies action to the packages in list for
- subsequent hosts in FILE. The remaining line type is a host
- description consisting of 6 tab separated fields. The first 3
- are mandatory; the remaining 3 are updated by the admin action:
- hosttype
- The host type as reported by package.
- [user@]host
- The host name and optionally user name for rcp(1)
- and rsh(1) access.
- [remote:[[master]:]]PACKAGEROOT
- The absolute remote package root directory and
- optionally the remote prorocol (rsh or ssh) if
- the directory is on a different server than the
- master package root directory. If
- lib/package/admin/$admin_env exists under
- this directory then it is sourced by sh(1)
- before ACTION is done. If this field begins with -
- then the host is ignored. If this field contains
- : then ditto(1) is used to sync the remote src
- directory hierarchy to the local one. If [master]:
- is specified then the sync is deferred to the
- master host. If master is omitted (two :) then
- the sync is disabled. These directories must exist
- on the remote side: lib/package, src/cmd, src/lib.
- date YYMMDD of the last action.
- date Elapsed wall time of the last action.
- M T W The admin action make, test and write action error
- counts. A non-numeric value in any of these fields
- disables the corresponding action.
- owner The owner contact information.
- attributes
- NAME=VALUE attributes. Should at least contain
- cc=compiler-version.
- clean | clobber
- Delete the arch/HOSTTYPE hierarchy; this deletes all generated
- files and directories for HOSTTYPE. The hierarchy can be rebuilt
- by package make.]
- contents [ package ... ]
- List description and components for PACKAGE on the standard
- output.
- copyright [ package ... ]
- List the general copyright notice(s) for PACKAGE on the
- standard output. Note that individual components in PACKAGE
- may contain additional or replacement notices.
- export [ VARIABLE ... ]
- List NAME=VALUE for each VARIABLE, one per line. If the
- \"only\" attribute is specified then only the variable
- values are listed. If no variables are specified then
- $env are assumed.
- help [ ACTION ]
- Display help text on the standard error [ standard output
- for ACTION ].
- host [ canon cpu name rating type ... ]
- List architecture/implementation dependent host information
- on the standard output. type is listed if no attributes are
- specified. Information is listed on a single line in attributes
- order. The attributes are:
- canon The next argument is a host type name to be
- converted to package syntax.
- cpu The number of cpus; 1 if the host is not a
- multiprocessor.
- name The host name.
- rating The cpu rating in pseudo mips; the value is useful
- useful only in comparisons with rating values of
- other hosts. Other than a vax rating fixed at 1,
- ratings can vary wildly but consistently from
- vendor mips ratings. cc(1) may be required to
- determine the rating.
- type The host type, usually of the form
- vendor.architecture, with an optional trailing
- -version. The main theme is that type names within
- a family of architectures are named in a similar,
- predictable style. Os point release information is
- avoided as much as possible, but vendor resistance
- to release incompatibilities has for the most part
- been futile.
- html [ ACTION ]
- Display html help text on the standard error [ standard output
- for ACTION ].
- install [ ARCHITECTURE ... ] DIR [ PACKAGE ... ]
- Copy the package binary hierarchy to DIR. If ARCHITECTURE is
- omitted then all architectures are installed. If the \"flat\"
- attribute is specified then exactly one ARCHITECTURE must be
- specified; this architecture will be installed in DIR without
- the \"arch/HOSTTYPE\" directory prefixes. Otherwise each
- architecture will be installed in a separate \"arch/HOSTTYPE\"
- subdirectory of DIR. The ARCHITECTURE - names the current
- architecture. DIR must be an existing directory. If PACKAGE
- is omitted then all binary packages are installed. This action
- requires nmake.
- license [ package ... ]
- List the source license(s) for PACKAGE on the standard output.
- Note that individual components in PACKAGE may contain
- additional or replacement licenses.
- list [ PACKAGE ... ]
- List the name, version and prerequisites for PACKAGE on the
- standard output.
- make [ PACKAGE ] [ OPTION ... ] [ TARGET ... ]
- Build and install. The default TARGET is install, which
- makes and installs all packages. If the standard output
- is a terminal then the output is also captured in
- \$INSTALLROOT/lib/package/gen/make.out. The build is done
- in the \$INSTALLROOT directory tree viewpathed on top of
- the \$PACKAGEROOT directory tree. If \"flat\" is specified then
- the \$INSTALLROOT { bin fun include lib } directories are
- linked to the same directories in the package root. Only
- one architecture may be flat. Leaf directory names matching
- the |-separated shell pattern \$MAKESKIP are ignored. The
- view action is done before making. OPTION operands are
- passed to the underlying make command.
- read [ package ... | archive ... ]
- Read the named package archive(s). Must be run from the
- package root directory. Archives are searched for in .
- and lib/package/tgz. Each package is read only once. The
- file lib/package/tgz/package[.type].tim tracks the read time.
- See the write action for archive naming conventions. Text
- file archive member are assumed to be ASCII or UTF-8 encoded.
- regress diff(1) the current and previous package test results.
- release [ [CC]YY-MM-DD [ [cc]yy-mm-dd ] ] [ package ]
- Display recent changes since [CC]YY-MM-DD (up to [cc]yy-mm-dd),
- where - means lowest (or highest.) If no dates are specified
- then changes for the last 4 months are listed. PACKAGE may
- be a package or component name.
- remove PACKAGE
- Remove files installed for PACKAGE.
- results [ path ] [ old ] [ make | test ]
- List results and interesting messages captured by the most
- recent make (default), test or write action. old specifies the
- previous results, if any (current and previous results are
- retained.) $HOME/.pkgresults, if it exists, must contain an
- egrep(1) expression of result lines to be ignored. failed lists
- failures only and path lists the results file path only.
- setup [ beta ] [ binary ] [ source ] [ ARCHITECTURE ... ] [ URL ] [ PACKAGE ... ]
- The action initializes the current directory as a package root,
- runs the update action to download new or out of date packages,
- and runs the read action on those packages. If \"flat\" is
- specified then the \$INSTALLROOT { bin fun include lib }
- directories are linked to the same directories in the package
- root. Only one architecture may be flat. See the update and
- read actions for argument details.
- test [ PACKAGE ]
- Run the regression tests for PACKAGE. If the standard output
- is a terminal then the output is also captured in
- \$INSTALLROOT/lib/package/gen/test.out. In general a package
- must be made before it can be tested. Components tested with
- the \bregress\b(1) command require \bksh93\b. If only is
- also specified then only the listed package components are
- tested, otherwise the closure of the components is tested.
- update [ beta ] [ binary ] [ source ] [ ARCHITECTURE ... ] [ URL ] [ PACKAGE ... ]
- Download the latest release of the selected and required
- packages from URL (e.g.,
- http://www.research.att.com/sw/download) into the directory
- \$PACKAGEROOT/lib/package/tgz. beta accesses beta packages;
- download these at your own risk. If ARCHITECTURE is omitted
- then only architectures already present in the tgz directory
- will be downloaded. If ARCHITECTURE is - then all posted
- architectures will be downloaded. If URL matches *.url then
- it is interpreted as a file containing shell variable
- assignments for url, authorize and password. If URL is
- omitted then the definitions for url, authorize and password
- in \$PACKAGEROOT/lib/package/tgz/$default_url, if it exists,
- are used. If \$PACKAGEROOT/lib/package/tgz/$default_url does
- not exist then it is initialized with the current url,
- authorize and password values and read permission for the
- current user only. If PACKAGE is omitted then only
- packages already present in the tgz directory will be
- downloaded. If PACKAGE is - then all posted packages will be
- downloaded. If source and binary are omitted then both source
- and binary packages will be downloaded. If \bonly\b is
- specified then only the named packages are updated; otherwise
- the closure of required packages is updated. This action
- requires wget(1), lynx(1), curl(1) or a shell that supports
- io to /dev/tcp/HOST/PORT.
- use [ uid | PACKAGE | . [ 32 | 64 ] | 32 | 64 | - ] [ COMMAND ... ]
- Run COMMAND or an interactive shell if COMMAND is omitted, with
- the environment initialized for using the package (can you say
- shared library without cussing?) If uid or PACKAGE or . is
- specified then it is used to determine a \$PACKAGEROOT,
- possibly different from the current directory. For example, to
- try out bozo's package: \"package use bozo\". In this case the
- command may be run from any directory. If the file
- \$INSTALLROOT/lib/package/profile is readable then it is
- sourced to initialize the environment. 32 or 64 implies
- \$PACKAGEROOT of . and specifies the target architecture word
- size (which may be silently ignored.)
- verify [ PACKAGE ]
- Verify installed binary files against the checksum files in
- \$INSTALLROOT/lib/package/gen/*.sum. The checksum files contain
- mode, user and group information. If the checksum matches
- for a given file then the mode, user and group are changed
- as necessary to match the checksum entry. A warning is printed
- on the standard error for each mismatch. Requires the ast
- package cksum(1) command.
- view
- Initialize the architecture specific viewpath hierarchy. The
- make action implicitly calls this action. If \"flat\" is specified
- then the \$INSTALLROOT { bin fun include lib } directories are
- linked to the same directories in the package root. Only one
- architecture may be flat.
- write [closure] [cyg|exp|lcl|pkg|rpm|tgz|tst] [base|delta]
- [binary|runtime|source] PACKAGE
- Write a package archive for PACKAGE. All work is done in the
- \$PACKAGEROOT/lib/package directory. FORMAT-specific files
- are placed in the FORMAT subdirectory. A PACKAGE[.TYPE].tim
- file in this directory tracksthe write time and prevents a
- package from being read in the same root it was written. If
- more than one file is generated for a particular FORMAT then
- those files are placed in the FORMAT/PACKAGE subdirectory.
- File names in the FORMAT subdirectory will contain the package
- name, a YYYY-MM-DD date, and for binary packages, HOSTTYPE.
- If PACKAGE is omitted then an ordered list of previously
- written packages is generated. If \"only\" is specified then
- only the named packages will be written; otherwise
- prerequisite packages are written first. Package components
- must be listed in PACKAGE.pkg. FORMAT may be one of:
- cyg generate a cygwin package
- exp generate an exptools(1) maintainer source archive
- and NPD file in the exp subdirectory, suitable for
- expmake(1); support files are placed in the
- exp/PACKAGE subdirectory
- lcl generate a package archive or delta in the lcl
- subdirectory, suitable for restoration into the
- primary source tree (no source licence annotation)
- pkg generate a pkgmk(1) package, suitable for pkgadd(1)
- rpm generate an rpm(1) package
- tgz generate a gzip(1) tar(1) package archive; this is
- the default
- tst generate tgz FORMAT package archive in the tst
- subdirectory; version state files are not updated
- The package type must be one of source, binary or runtime.
- A source package contains the source needed to build the
- corresponding binary package. A binary package includes the
- libraries and headers needed for compiling and linking
- against the public interfaces. A runtime package contains
- the commands and required dynamic libraries. A package may
- be either a base or delta. A base package contains a
- complete copy of all components. A delta package contains
- only changes from a previous base package. Delta recipients
- must have the ast pax(1) command (in the ast-base package.)
- If neither base nor delta is specified, then the current
- base is overwritten if there are no deltas referring to the
- current base. Only the tgz and lcl formats support delta.
- If base is specified then a new base and two delta archives
- are generated: one delta to generate the new base from the
- old, and one delta to generate the old base from the new;
- the old base is then removed. If delta is specified then a
- new delta referring to the current base is written.
- package.pkg may reference other packages. By default a
- pointer to those packages is written. The recipient package
- read will then check that all required packages have been
- downloaded. If closure is specified then the components for
- all package references are included in the generated
- package. This may be useful for lcl and versioning. All
- formats but lcl annotate each source file (not already
- annotated) with a license comment as it is written to the
- package archive using proto(1).
- name=value:
- variable definition: typically CC=cc or CCFLAGS=-g."
- ;;
- esac
- exit $code
- ;;
- *=*) set DEFAULT host type "$@"
- ;;
- *) echo "Usage: $command [ options ] [ qualifier ... ] [ action ] [ arg ... ] [ n=v ... ]" >&2
- exit 2
- ;;
- esac
- global="$global $1"
- shift
- done
- # gather HOSTTYPE *,* options
- # ,*cc*,-*,... set CC and CCFLAGS
- hostopts()
- {
- _ifs_=$IFS
- IFS=,
- set '' $HOSTTYPE
- IFS=$_ifs_
- shift
- while :
- do case $# in
- 0|1) break ;;
- esac
- shift
- case $1 in
- *cc*) CC=$1
- while :
- do case $# in
- 0|1) break ;;
- esac
- case $2 in
- -*) case $assign_CCFLAGS in
- ?*) assign_CCFLAGS="$assign_CCFLAGS " ;;
- esac
- assign_CCFLAGS="$assign_CCFLAGS$2"
- shift
- ;;
- *) break
- ;;
- esac
- done
- ;;
- esac
- done
- }
- # collect command line targets and definitions
- case $_PACKAGE_HOSTTYPE_ in
- ?*) HOSTTYPE=$_PACKAGE_HOSTTYPE_
- KEEP_HOSTTYPE=1
- ;;
- *) KEEP_HOSTTYPE=0
- ;;
- esac
- KEEP_PACKAGEROOT=0
- KEEP_SHELL=0
- USER_VPATH=
- args=
- assign=
- assign_CCFLAGS=
- for i
- do case $i in
- *:*=*) args="$args $i"
- continue
- ;;
- *=*) eval `echo ' ' "$i" | sed 's,^[ ]*\([^=]*\)=\(.*\),n=\1 v='\''\2'\'','`
- ;;
- esac
- case $i in
- AR=*|LD=*|NM=*)
- assign="$assign $n='$v'"
- eval $n='$'v
- ;;
- CC=*) eval $n='$'v
- ;;
- CCFLAGS=*)
- eval $n='$'v
- assign_CCFLAGS="CCFLAGS=\"\$CCFLAGS\""
- ;;
- HOSTTYPE=*)
- eval $n='$'v
- case $HOSTTYPE in
- ?*) KEEP_HOSTTYPE=1 ;;
- esac
- ;;
- HURL=*) eval $n='$'v
- ;;
- PACKAGEROOT=*)
- eval $n='$'v
- case $PACKAGEROOT in
- ?*) KEEP_PACKAGEROOT=1 ;;
- esac
- ;;
- SHELL=*)eval $n='$'v
- case $SHELL in
- ?*) KEEP_SHELL=1 ;;
- esac
- ;;
- TAR=*) eval $n='$'v
- ;;
- TARFLAGS=*)
- eval $n='$'v
- ;;
- VPATH=*)eval USER_$n='$'v
- ;;
- 'debug=1')
- makeflags="$makeflags --debug-symbols"
- ;;
- 'strip=1')
- makeflags="$makeflags --strip-symbols"
- ;;
- *=*) assign="$assign $n='$v'"
- ;;
- *) args="$args $i"
- ;;
- esac
- done
- case $HOSTTYPE in
- *,*) hostopts $HOSTTYPE ;;
- esac
- case $assign_CCFLAGS in
- ?*) assign="$assign $assign_CCFLAGS"
- esac
- case $CC in
- ''|cc) ;;
- *) export CC ;;
- esac
- # Add build type flags via KSH_RELFLAGS, which is used in src/cmd/ksh93/Mamfile.
- # (Avoid using CCFLAGS; setting it would overwrite autodetected optimization flags.)
- ksh_relflags=
- case `git branch 2>/dev/null` in
- '' | *\*\ [0-9]*.[0-9]*)
- # If we're not on a git branch (tarball) or on a branch that starts
- # with a number (release branch), then compile as a release version
- ksh_relflags="${ksh_relflags:+$ksh_relflags }-D_AST_ksh_release" ;;
- *) # Otherwise, add 8-character git commit hash if available, and if the working dir is clean
- git_commit=`git status >/dev/null 2>&1 && git diff-index --quiet HEAD && git rev-parse --short=8 HEAD`
- case $git_commit in
- ????????)
- ksh_relflags="${ksh_relflags:+$ksh_relflags }-D_AST_git_commit=\\\"$git_commit\\\"" ;;
- esac
- unset git_commit ;;
- esac
- case $ksh_relflags in
- ?*) # add the extra flags as an argument to mamake
- assign="${assign:+$assign }KSH_RELFLAGS=\"\$ksh_relflags\"" ;;
- esac
- # Add ksh compile-options via KSH_SHOPTFLAGS.
- SHOPT()
- {
- case $1 in
- *=?*) ksh_shoptflags="${ksh_shoptflags:+$ksh_shoptflags }-DSHOPT_$1" ;;
- esac
- }
- ksh_shoptflags=
- shopt_sh='src/cmd/ksh93/SHOPT.sh' # this script calls SHOPT() to set options
- if test -f "$shopt_sh"
- then . "$shopt_sh"
- else echo "WARNING: $shopt_sh is missing" >&2
- fi
- case $ksh_shoptflags in
- ?*) # add the extra flags as an argument to mamake
- assign="${assign:+$assign }KSH_SHOPTFLAGS=\"\$ksh_shoptflags\"" ;;
- esac
- # grab action specific args
- case $action in
- admin) while :
- do case $# in
- 0) set list
- break
- ;;
- esac
- case $1 in
- all) admin_all=1
- ;;
- db) case $# in
- 1) echo $command: $action: $1: db file argument expected >&2
- exit 1
- ;;
- esac
- shift
- admin_db=$1
- ;;
- on) case $# in
- 1) echo $command: $action: $1: host pattern argument expected >&2
- exit 1
- ;;
- esac
- shift
- admin_on=$1
- ;;
- *) break
- ;;
- esac
- shift
- done
- admin_action=$1
- admin_args=$*
- for i
- do case $i in
- debug|environment|force|never|only|quiet|show|DEBUG)
- ;;
- *) admin_action=$i
- break
- ;;
- esac
- done
- ;;
- setup) PACKAGEROOT=${PWD:-`pwd`}
- export PACKAGEROOT
- KEEP_PACKAGEROOT=1
- ;;
- use) case $1 in
- .|32|64)case $1 in
- 32|64) bit=$1 ;;
- esac
- shift
- # HOSTTYPE specific setup
- case $HOSTTYPE in
- win32.*)sys=uwin
- wow=`uname -i`
- case $bit in
- 32) case $HOSTTYPE in
- *-64) HOSTTYPE=${HOSTTYPE%-64} ;;
- esac
- ;;
- 64) case $HOSTTYPE in
- *-64) ;;
- *) HOSTTYPE=$HOSTTYPE-64 ;;
- esac
- case $wow in
- */32) echo $command: cannot build $bit-bit on $wow $sys >&2; exit 2 ;;
- esac
- ;;
- esac
- case $bit in
- '') PS1="($sys) " ;;
- *) PS1="($sys-$bit) " ;;
- esac
- $exec umask 002
- $exec unset MAKESKIP
- $exec export P=$PWD
- $exec export A=$P/arch/$HOSTTYPE
- $exec export CDPATH=:..:$A/src/cmd:$A/src/lib:$A/src/uwin:$P/lib/package
- $exec export INSTALLROOT=$A
- $exec export PACKAGEROOT=$P
- $exec export PATH=$A/bin:$P/bin:$PATH
- $exec export PS1="$PS1"
- $exec export VPATH=$A:$P
- $exec export nativepp=/usr/lib
- if test '' != "$INSTALLROOT" -a -d $INSTALLROOT/include/ast
- then $exec export PACKAGE_ast=$INSTALLROOT
- elif test -d ${PWD%/*}/ast/arch/$HOSTTYPE
- then $exec export PACKAGE_ast=${PWD%/*}/ast/arch/$HOSTTYPE
- fi
- # run the command
- case $# in
- 0) case $show in
- ':') $exec exec $SHELL ;;
- esac
- ;;
- *) $exec exec $SHELL -c "$@"
- ;;
- esac
- exit
- ;;
- esac
- PACKAGEROOT=${PWD:-`pwd`}
- $show export PACKAGEROOT
- esac
- ;;
- esac
- # true if arg is a valid PACKAGEROOT
- packageroot() # dir
- {
- test -d $1/lib/$command -o -x $1/bin/$command
- }
- # true if arg is executable
- executable() # [!] command
- {
- case $1 in
- '!') test ! -x "$2" -a ! -x "$2.exe"; return ;;
- *) test -x "$1" -o -x "$1.exe"; return ;;
- esac
- }
- # initialize SHELLMAGIC
- # tangible proof of cygwin's disdain for unix (well, this and execrate)
- shellmagic()
- {
- case $SHELLMAGIC in
- '') ;;
- -) if test -f /emx/bin/sh.exe
- then SHELLMAGIC='#!/emx/bin/sh.exe'$nl
- elif test -f /bin/env.exe
- then SHELLMAGIC='#!/bin/env sh'$nl
- else SHELLMAGIC=
- fi
- ;;
- esac
- }
- # true if arg is executable command on $PATH
- onpath() # command
- {
- _onpath_b=$1
- case $_onpath_b in
- /*) if executable $_onpath_b
- then _onpath_=$_onpath_b
- return 0
- fi
- return 1
- ;;
- esac
- IFS=':'
- set '' $PATH
- IFS=$ifs
- shift
- for _onpath_d
- do case $_onpath_d in
- '') _onpath_d=. ;;
- esac
- if executable "$_onpath_d/$_onpath_b"
- then _onpath_=$_onpath_d/$_onpath_b
- return 0
- fi
- done
- return 1
- }
- # true if no nmake or nmake not from AT&T or nmake too old
- nonmake() # nmake
- {
- _nonmake_version=`( $1 -n -f - 'print $(MAKEVERSION:@/.*AT&T.* //:/-//G:@/.* .*/19960101/)' . ) </dev/null 2>/dev/null || echo 19840919`
- if test $_nonmake_version -lt 20001031
- then return 0
- fi
- return 1
- }
- # determine local host attributes
- hostinfo() # attribute ...
- {
- case $DEBUG in
- 1) set -x ;;
- esac
- map=
- something=
- path=$PATH
- for i in $ccs
- do PATH=$PATH:$i
- done
- for i in $use
- do for j in $org
- do PATH=$PATH:$i/$j/bin
- done
- PATH=$PATH:$i/bin
- done
- # LD_LIBRARY_PATH may be out of sync with PATH here
- case $SED in
- '') SED=sed
- $SED 1d < /dev/null > /dev/null 2>&1 ||
- for dir in /bin /usr/bin
- do if test -x $dir/$SED
- then SED=$dir/$SED
- break
- fi
- done
- TR=tr
- $TR < /dev/null > /dev/null 2>&1 ||
- for dir in /bin /usr/bin
- do if test -x $dir/$TR
- then TR=$dir/$TR
- break
- fi
- done
- ;;
- esac
- case $PACKAGE_PATH in
- ?*) for i in `echo $PACKAGE_PATH | $SED 's,:, ,g'`
- do PATH=$PATH:$i/bin
- done
- ;;
- esac
- # validate the args
- canon=
- cc=$CC
- for info
- do case $canon in
- -) canon=$info
- ;;
- *) case $info in
- */*|*[cC][cC])
- cc=$info
- ;;
- canon) canon=-
- something=1
- ;;
- cpu|name|rating|type)
- something=1
- ;;
- *) echo "$command: $action: $info: unknown attribute" >&2
- exit 1
- ;;
- esac
- ;;
- esac
- done
- case $canon in
- -) echo "$command: $action: canon: host type name expected" >&2
- exit 1
- ;;
- esac
- case $something in
- "") set "$@" type ;;
- esac
- case $DEBUG in
- '') exec 9>&2
- exec 2>/dev/null
- ;;
- esac
- # compute the info
- _hostinfo_=
- for info
- do
- case $info in
- cpu) case $NPROC in
- [123456789]*)
- _hostinfo_="$_hostinfo_ $NPROC"
- continue
- ;;
- esac
- cpu=`sysctl -n hw.ncpu`
- case $cpu in
- [123456789]*)
- _hostinfo_="$_hostinfo_ $cpu"
- continue
- ;;
- esac
- cpu=`grep -ic '^processor[ ][ ]*:[ ]*[0123456789]' /proc/cpuinfo`
- case $cpu in
- [123456789]*)
- _hostinfo_="$_hostinfo_ $cpu"
- continue
- ;;
- esac
- cpu=1
- # exact match
- set \
- hinv '^Processor [0123456789]' \
- psrinfo 'on-line' \
- 'cat /reg/LOCAL_MACHINE/Hardware/Description/System/CentralProcessor' '.' \
- 'cat /proc/registry/HKEY_LOCAL_MACHINE/Hardware/Description/System/CentralProcessor' '.' \
- while :
- do case $# in
- 0) break ;;
- esac
- i=`$1 2>/dev/null | grep -c "$2"`
- case $i in
- [123456789]*)
- cpu=$i
- break
- ;;
- esac
- shift;shift
- done
- case $cpu in
- 0|1) set \
- /bin/mpstat
- while :
- do case $# in
- 0) break ;;
- esac
- if executable $1
- then case `$1 | grep -ic '^cpu '` in
- 1) cpu=`$1 | grep -ic '^ *[0123456789][0123456789]* '`
- break
- ;;
- esac
- fi
- shift
- done
- ;;
- esac
- case $cpu in
- 0|1) # token match
- set \
- /usr/kvm/mpstat 'cpu[0123456789]' \
- /usr/etc/cpustatus 'enable' \
- /usr/alliant/showsched 'CE' \
- 'ls /config/hw/system/cpu' 'cpu' \
- prtconf 'cpu-unit' \
- while :
- do case $# in
- 0) break ;;
- esac
- i=`$1 2>/dev/null | $TR ' ' '
- ' | grep -c "^$2"`
- case $i in
- [123456789]*)
- cpu=$i
- break
- ;;
- esac
- shift;shift
- done
- ;;
- esac
- case $cpu in
- 0|1) # special match
- set \
- \
- hinv \
- '/^[0123456789][0123456789]* .* Processors*$/' \
- '/[ ].*//' \
- \
- /usr/bin/hostinfo \
- '/^[0123456789][0123456789]* .* physically available\.*$/' \
- '/[ ].*//' \
- while :
- do case $# in
- 0) break ;;
- esac
- i=`$1 2>/dev/null | $SED -e "${2}!d" -e "s${3}"`
- case $i in
- [123456789]*)
- cpu=$i
- break
- ;;
- esac
- shift;shift;shift
- done
- ;;
- esac
- case $cpu in
- 0|1) cpu=`(
- cd "$TMPDIR"
- tmp=hi$$
- trap 'rm -f $tmp.*' 0 1 2
- cat > $tmp.c <<!
- #include <stdio.h>
- #include <pthread.h>
- int main()
- {
- printf("%d\n", pthread_num_processors_np());
- return 0;
- }
- !
- for o in -lpthread ''
- do if $CC $o -O -o $tmp.exe $tmp.c $o >/dev/null 2>&1 ||
- gcc $o -O -o $tmp.exe $tmp.c $o >/dev/null 2>&1
- then ./$tmp.exe
- break
- fi
- done
- )`
- case $cpu in
- [0123456789]*) ;;
- *) cpu=1 ;;
- esac
- ;;
- esac
- _hostinfo_="$_hostinfo_ $cpu"
- ;;
- name) _name_=`hostname || uname -n || cat /etc/whoami || echo local`
- _hostinfo_="$_hostinfo_ $_name_"
- ;;
- rating) for rating in `grep -i ^bogomips /proc/cpuinfo 2>/dev/null | $SED -e 's,.*:[ ]*,,' -e 's,\(...*\)\..*,\1,' -e 's,\(\..\).*,\1,'`
- do case $rating in
- [0123456789]*) break ;;
- esac
- done
- case $rating in
- [0123456789]*) ;;
- *) cd "$TMPDIR"
- tmp=hi$$
- trap 'rm -f $tmp.*' 0 1 2
- cat > $tmp.c <<!
- #include <stdio.h>
- #include <sys/types.h>
- #if TD || TZ
- #include <sys/time.h>
- #else
- extern time_t time();
- #endif
- int main()
- {
- register unsigned long i;
- register unsigned long j;
- register unsigned long k;
- unsigned long l;
- unsigned long m;
- unsigned long t;
- int x;
- #if TD || TZ
- struct timeval b;
- struct timeval e;
- #if TZ
- struct timezone z;
- #endif
- #endif
- l = 500;
- m = 890;
- x = 0;
- for (;;)
- {
- #if TD || TZ
- #if TZ
- gettimeofday(&b, &z);
- #else
- gettimeofday(&b);
- #endif
- #else
- t = (unsigned long)time((time_t*)0);
- #endif
- k = 0;
- for (i = 0; i < l; i++)
- for (j = 0; j < 50000; j++)
- k += j;
- #if TD || TZ
- #if TZ
- gettimeofday(&e, &z);
- #else
- gettimeofday(&e);
- #endif
- t = (e.tv_sec - b.tv_sec) * 1000 + (e.tv_usec - b.tv_usec) / 1000;
- if (!x++ && t < 1000)
- {
- t = 10000 / t;
- l = (l * t) / 10;
- continue;
- }
- #else
- t = ((unsigned long)time((time_t*)0) - t) * 1000;
- if (!x++ && t < 20000)
- {
- t = 200000l / t;
- l = (l * t) / 10;
- continue;
- }
- #endif
- #if PR
- printf("[ k=%lu l=%lu m=%lu t=%lu ] ", k, l, m, t);
- #endif
- if (t == 0)
- t = 1;
- break;
- }
- printf("%lu\n", ((l * m) / 10) / t);
- return k == 0;
- }
- !
- rating=
- for o in -DTZ -DTD ''
- do if $CC $o -O -o $tmp.exe $tmp.c >/dev/null 2>&1 ||
- gcc $o -O -o $tmp.exe $tmp.c >/dev/null 2>&1
- then rating=`./$tmp.exe`
- break
- fi
- done
- case $rating in
- [0123456789]*) ;;
- *) rating=1 ;;
- esac
- ;;
- esac
- _hostinfo_="$_hostinfo_ $rating"
- ;;
- type|canon)
- case $CROSS:$canon in
- 0:) case $cc in
- cc) case $KEEP_HOSTTYPE:$HOSTTYPE in
- 0:?*) if test -d ${PACKAGEROOT:-.}/arch/$HOSTTYPE
- then KEEP_HOSTTYPE=1
- fi
- ;;
- esac
- ;;
- esac
- case $KEEP_HOSTTYPE in
- 1) _hostinfo_="$_hostinfo_ $HOSTTYPE"
- continue
- ;;
- esac
- ;;
- esac
- case $cc in
- /*) a=`$cc -dumpmachine $CCFLAGS 2>/dev/null`
- case $a in
- '') case $CCFLAGS in
- ?*) a=`$cc -dumpmachine 2>/dev/null` ;;
- esac
- ;;
- esac
- case $a in
- ''|*' '*|*/*:*)
- ;;
- *.*-*) _hostinfo_="$_hostinfo_ $a"
- continue
- ;;
- *-*-*) case $canon in
- '') canon=$a ;;
- esac
- ;;
- *) _hostinfo_="$_hostinfo_ $a"
- continue
- ;;
- esac
- ;;
- esac
- IFS=:
- set /$IFS$PATH
- IFS=$ifs
- shift
- f=../lib/hostinfo/typemap
- for i
- do case $i in
- "") i=. ;;
- esac
- case $canon in
- '') case $cc in
- /*|cc) ;;
- *) if executable $i/$cc
- then a=`$i/$cc -dumpmachine $CCFLAGS 2>/dev/null`
- case $a in
- '') case $CCFLAGS in
- ?*) a=`$cc -dumpmachine 2>/dev/null` ;;
- esac
- ;;
- esac
- case $a in
- ''|*' '*|*/*:*)
- ;;
- *-*) canon=$a
- ;;
- *) _hostinfo_="$_hostinfo_ $a"
- continue 2
- ;;
- esac
- fi
- ;;
- esac
- ;;
- esac
- if test -f "$i/$f"
- then map="`grep -v '^#' $i/$f` $map"
- fi
- done
- # inconsistent -dumpmachine filtered here
- case -${canon}- in
- --|*-powerpc-*)
- h=`hostname || uname -n || cat /etc/whoami`
- case $h in
- '') h=local ;;
- esac
- a=`arch || uname -m || att uname -m || uname -s || att uname -s`
- case $a in
- *[\ \ ]*) a=`echo $a | $SED "s/[ ]/-/g"` ;;
- esac
- case $a in
- '') a=unknown ;;
- esac
- m=`mach || machine || uname -p || att uname -p`
- case $m in
- *[\ \ ]*) m=`echo $m | $SED "s/[ ]/-/g"` ;;
- esac
- case $m in
- '') m=unknown ;;
- esac
- x=`uname -a || att uname -a`
- case $x in
- '') x="unknown $host unknown unknown unknown unknown unknown" ;;
- esac
- set "" $h $a $m $x
- expected=$1 host=$2 arch=$3 mach=$4 os=$5 sys=$6 rel=$7 ver=$8
- ;;
- *) case $canon in
- *-*) IFS=-
- set "" $canon
- shift
- IFS=$ifs
- case $# in
- 2) host= mach= arch=$1 os=$2 sys= rel= ;;
- *) host= mach=$2 arch=$1 os=$3 sys= rel= ;;
- esac
- case $os in
- [abcdefghijklmnopqrstuvwxyz]*[0123456789])
- eval `echo $os | $SED -e 's/^\([^0123456789.]*\)\.*\(.*\)/os=\1 rel=\2/'`
- ;;
- esac
- ;;
- *) arch=$canon mach= os= sys= rel=
- ;;
- esac
- ;;
- esac
- type=unknown
- case $host in
- *.*) host=`echo $host | $SED -e 's/\..*//'` ;;
- esac
- case $mach in
- unknown)
- mach=
- ;;
- [Rr][0123][0123456789][0123456789][0123456789])
- mach=mips1
- ;;
- [Rr][4][0123456789][0123456789][0123456789])
- mach=mips2
- ;;
- [Rr][56789][0123456789][0123456789][0123456789]|[Rr][123456789][0123456789][0123456789][0123456789][0123456789])
- mach=mips4
- ;;
- pc) arch=i386
- mach=
- ;;
- [Pp][Oo][Ww][Ee][Rr][Pp][Cc])
- arch=ppc
- mach=
- ;;
- *) case $arch in
- 34[0123456789][0123456789])
- os=ncr
- arch=i386
- ;;
- esac
- ;;
- esac
- case $canon in
- '') set \
- \
- /NextDeveloper -d next - \
- /config/hw/system/cpu -d tandem mach \
- while :
- do case $# in
- 0) break ;;
- esac
- if test $2 $1
- then os=$3
- case $4 in
- arch) mach=$arch ;;
- mach) arch=$mach ;;
- esac
- break
- fi
- shift;shift;shift;shift
- done
- ;;
- esac
- case $os in
- AIX*|aix*)
- type=ibm.risc
- ;;
- HP-UX) case $arch in
- 9000/[78]*)
- type=hp.pa
- ;;
- */*) type=hp.`echo $arch | $SED 's,/,_,g'`
- ;;
- *) type=hp.$arch
- ;;
- esac
- ;;
- [Ii][Rr][Ii][Xx]*)
- set xx `hinv | $SED -e '/^CPU:/!d' -e 's/CPU:[ ]*\([^ ]*\)[ ]*\([^ ]*\).*/\1 \2/' -e q | $TR ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
- shift
- type=$1
- n=
- case $2 in
- r[0123][0123456789][0123456789][0123456789])
- n=1
- ;;
- r[4][0123][0123456789][0123456789])
- n=2
- ;;
- r[4][456789][0123456789][0123456789]|r[5][0123456789][0123456789][0123456789])
- n=3
- ;;
- r[6789][0123456789][0123456789][0123456789]|r[123456789][0123456789][0123456789][0123456789][0123456789])
- n=4
- ;;
- esac
- case $rel in
- [01234].*|5.[012]|5.[012].*)
- case $n in
- 1) ;;
- *) n=2 ;;
- esac
- ;;
- 5.*) case $n in
- 2) n=3 ;;
- esac
- ;;
- esac
- if executable $cc
- then a=$cc
- else IFS=:
- set /$IFS$PATH
- IFS=$ifs
- shift
- for i
- do a=$i/$cc
- if executable $a
- then break
- fi
- done
- fi
- split='
- '
- a=`strings $a < /dev/null | $SED -e 's/[^abcdefghijklmnopqrstuvwxyz0123456789]/ /g' -e 's/[ ][ ]*/\'"$split"'/g' | $SED -e "/^${type}[0123456789]$/!d" -e "s/^${type}//" -e q`
- case $a in
- [0123456789]) n=$a ;;
- esac
- case $n in
- 4) a=`$cc -${type}3 2>&1`
- case $a in
- *unknown*|*install*|*conflict*)
- ;;
- *) n=3
- ;;
- esac
- ;;
- esac
- a=`$cc -show F0oB@r.c 2>&1`
- case $n:$a in
- [!2]:*mips2*) n=2 ;;
- [!23]:*mips3*) n=3 ;;
- [!234]:*mips4*) n=4 ;;
- esac
- case $n:$a in
- [!2]:*[Oo]32*) abi=-o32 ;;
- [!3]:*[Nn]32*) abi=-n32 ;;
- esac
- mach=${type}$n
- type=sgi.$mach
- ;;
- OSx*|SMP*|pyramid)
- type=pyr
- ;;
- OS/390) type=mvs.390
- ;;
- [Ss][Cc][Oo]*)
- type=sco
- ;;
- [Ss]ol*)
- v=`echo $rel | $SED -e 's/^[25]\.//' -e 's/\.[^.]*$//'`
- case $v in
- [6789]|[1-9][0-9])
- ;;
- *) v=
- ;;
- esac
- case $arch in
- '') case $mach in
- '') arch=sun4 ;;
- *) arch=$mach ;;
- esac
- ;;
- esac
- case $arch in
- sparc) arch=sun4 ;;
- esac
- type=sol$v.$arch
- ;;
- [Ss]un*)type=`echo $arch | $SED -e 's/\(sun.\).*/\1/'`
- case $type in
- sparc) type=sun4 ;;
- esac
- case $rel in
- [01234]*)
- ;;
- '') case $os in
- *[Oo][Ss])
- ;;
- *) type=sol.$type
- ;;
- esac
- ;;
- *) case $type in
- '') case $mach in
- sparc*) type=sun4 ;;
- *) type=$mach ;;
- esac
- ;;
- esac
- v=`echo $rel | $SED -e 's/^[25]\.//' -e 's/\.[^.]*$//'`
- case $v in
- [6789]|[1-9][0-9])
- ;;
- *) v=
- ;;
- esac
- type=sol$v.$type
- ;;
- esac
- case $type in
- sun*|*.*)
- ;;
- *) type=sun.$type
- ;;
- esac
- ;;
- [Uu][Nn][Ii][Xx]_[Ss][Vv])
- type=unixware
- ;;
- UTS*|uts*)
- if test -x /bin/u370 -o -x /bin/u390
- then type=uts.390
- else case $arch in
- '') arch=$mach ;;
- esac
- type=uts.$arch
- fi
- ;;
- $host) type=$arch
- case $type in
- *.*|*[0123456789]*86|*68*)
- ;;
- *) case $mach in
- *[0123456789]*86|*68*|mips)
- type=$type.$mach
- ;;
- esac
- ;;
- esac
- ;;
- unknown)
- case $arch in
- ?*) case $arch in
- sun*) mach= ;;
- esac
- type=$arch
- case $mach in
- ?*) type=$type.$mach ;;
- esac
- ;;
- esac
- ;;
- *) case $ver in
- FTX*|ftx*)
- case $mach in
- *[0123456789][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
- mach=`echo $mach | $SED -e 's/[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*$//'`
- ;;
- esac
- type=stratus.$mach
- ;;
- *) case $arch in
- [Oo][Ss][-/.]2)
- type=os2
- arch=$rel
- ;;
- *) type=`echo $os | $SED -e 's/[0123456789].*//' -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789.].*//'`
- ;;
- esac
- case $type in
- [Cc][Yy][Gg][Ww][Ii][Nn]_*)
- type=cygwin
- ;;
- [Uu][Ww][Ii][Nn]*|[Ww]indows_[0123456789][0123456789]|[Ww]indows_[Nn][Tt])
- type=win32
- arch=`echo $arch | $SED -e 's/_[^_]*$//'`
- ;;
- esac
- case $arch in
- '') case $mach in
- ?*) type=$type.$mach ;;
- esac
- ;;
- *) type=$type.$arch ;;
- esac
- ;;
- esac
- esac
- case $type in
- [0123456789]*)
- case $mach in
- ?*) type=$mach ;;
- esac
- case $type in
- */MC) type=ncr.$type ;;
- esac
- ;;
- *.*) ;;
- *[0123456789]*86|*68*)
- case $rel in
- [34].[0123456789]*)
- type=att.$type
- ;;
- esac
- ;;
- [abcdefghijklmnopqrstuvwxyz]*[0123456789])
- ;;
- [abcdefghijklmnopqrstuvwxyz]*) case $mach in
- $type) case $ver in
- Fault*|fault*|FAULT*)
- type=ft.$type
- ;;
- esac
- ;;
- ?*) case $arch in
- '') type=$type.$mach ;;
- *) type=$type.$arch ;;
- esac
- ;;
- esac
- ;;
- esac
- case $type in
- *[-_]32|*[-_]64|*[-_]128)
- bits=`echo $type | $SED 's,.*[-_],,'`
- type=`echo $type | $SED 's,[-_][0-9]*$,,'`
- ;;
- *) bits=
- ;;
- esac
- type=`echo $type | $SED -e 's%[-+/].*%%' | $TR ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
- case $type in
- *.*) lhs=`echo $type | $SED -e 's/\..*//'`
- rhs=`echo $type | $SED -e 's/.*\.//'`
- case $rhs in
- [x0123456789]*86) rhs=i$rhs ;;
- 68*) rhs=m$rhs ;;
- esac
- case $rhs in
- i[x23456789]86|i?[x23456789]86|*86pc)
- rhs=i386 ;;
- powerpc) rhs=ppc ;;
- s[0123456789]*[0123456789]x)
- rhs=`echo $rhs | $SED -e 's/x$/-64/'` ;;
- esac
- case $rhs in
- arm[abcdefghijklmnopqrstuvwxyz_][0123456789]*)
- rhs=arm ;;
- hppa) rhs=pa ;;
- esac
- case $lhs in
- ?*coff|?*dwarf|?*elf)
- case $lhs in
- ?*coff) x=coff ;;
- ?*dwarf)x=coff ;;
- ?*elf) x=elf ;;
- esac
- lhs=`echo ${lhs}XXX | $SED -e "s/${x}XXX//"`
- ;;
- esac
- case $lhs in
- bsdi) lhs=bsd ;;
- darwin) case `/usr/bin/cc --version` in
- *'(GCC)'*) case $rel in
- [0-9].*|10.*) lhs=darwin07 ;;
- *) lhs=darwin11 ;;
- esac ;;
- esac
- ;;
- freebsd) case $rel in
- [01234].*) lhs=${lhs}4 ;;
- [123456789]*.*) lhs=${lhs}`echo $rel | $SED -e 's/\..*//'` ;;
- esac
- ;;
- hpux) lhs=hp ;;
- mvs) rhs=390 ;;
- esac
- case $lhs in
- '') type=$rhs ;;
- $rhs) type=$lhs ;;
- *) type=$lhs.$rhs ;;
- esac
- ;;
- esac
- case $type in
- sgi.mips*)
- case $mach in
- mips2) type=sgi.$mach
- abi=-o32
- ;;
- mips3) type=sgi.$mach
- abi=-n32
- ;;
- mips[456789])
- type=sgi.$mach
- case $abi in
- *-n32) ;;
- *) abi=-64 ;;
- esac
- ;;
- *) pwd=`pwd`
- cd "$TMPDIR"
- tmp=hi$$
- trap 'rm -f $tmp.*' 0 1 2
- cat > $tmp.a.c <<!
- extern int b();
- int main() { return b(); }
- !
- cat > $tmp.b.c <<!
- int b() { return 0; }
- !
- abi=
- if $cc -c $tmp.a.c
- then for i in -n32 -o32 -64
- do if $cc $i -c $tmp.b.c &&
- $cc -o $tmp.exe $tmp.a.o $tmp.b.o
- then abi=$i
- for i in 2 3 4 5 6 7 8 9
- do case $i:$abi in
- 2:-n32|2:-64|3:-64)
- continue
- ;;
- esac
- if $cc $abi -mips$i -c $tmp.b.c &&
- $cc -o $tmp.exe $tmp.a.o $tmp.b.o
- then type=`echo $type | $SED -e 's/.$//'`$i
- break
- fi
- done
- break
- fi
- done
- fi </dev/null >/dev/null 2>&1
- rm -f $tmp.*
- trap - 0 1 2
- cd $pwd
- ;;
- esac
- case $type$abi in
- sgi.mips2-o32)
- ;;
- sgi.mips3)
- type=$type-o32
- ;;
- sgi.mips3-n32)
- ;;
- sgi.mips4)
- type=$type-o32
- ;;
- sgi.mips[456789]-64)
- ;;
- *) type=$type$abi
- ;;
- esac
- ;;
- *) case $bits in
- '') bits=` cd "$TMPDIR"
- tmp=hi$$
- trap 'rm -f $tmp.*' 0 1 2
- echo 'int main() { return 0; }' > $tmp.a.c
- $cc $CCFLAGS -o $tmp.a.exe $tmp.a.c </dev/null >/dev/null 2>&1
- file $tmp.a.exe 2>/dev/null | sed "s/$tmp\.a\.exe//g" `
- case $bits in
- *64*) bits=64 ;;
- *) bits= ;;
- esac
- ;;
- esac
- ;;
- esac
- case $bits in
- 32) case $type in
- *.i386) bits= ;;
- esac
- ;;
- esac
- case $bits in
- ?*) type=$type-$bits ;;
- esac
- # last chance mapping
- set "" "" $map
- while :
- do case $# in
- [012]) break ;;
- esac
- shift;shift
- eval " case \$type in
- $1) type=\$2; break ;;
- esac"
- done
- _hostinfo_="$_hostinfo_ $type"
- ;;
- esac
- done
- set '' $_hostinfo_
- shift
- _hostinfo_=$*
- # restore the global state
- PATH=$path
- case $DEBUG in
- '') exec 2>&9
- exec 9>&-
- ;;
- esac
- }
- # info message
- note() # message ...
- {
- echo $command: "$@" >&2
- }
- # cc checks
- #
- # CC: compiler base name name
- # cc: full path, empty if not found
- checkcc()
- {
- cc=
- if onpath $CC
- then cc=$_onpath_
- else case $CC in
- cc) if onpath gcc
- then CC=gcc
- cc=$_onpath_
- fi
- ;;
- esac
- fi
- case $cc in
- '') case $action in
- make|test) note "$CC: not found"; exit 1 ;;
- *) note "warning: $CC: not found" ;;
- esac
- ;;
- esac
- }
- # some actions have their own PACKAGEROOT or kick out early
- case $action in
- host) eval u=$package_use
- case $u in
- $PACKAGE_USE)
- ;;
- *) if onpath $0
- then case $_onpath_ in
- */arch/$HOSTTYPE/bin/package)
- KEEP_HOSTTYPE=1
- ;;
- *) KEEP_HOSTTYPE=0
- ;;
- esac
- else KEEP_HOSTTYPE=0
- fi
- ;;
- esac
- hostinfo $args
- echo $_hostinfo_
- exit 0
- ;;
- export|setup|use)
- x=
- ;;
- *) x=
- eval u=$package_use
- case $u in
- $PACKAGE_USE)
- case :$PATH: in
- *:$INSTALLROOT/bin:*)
- case $LIBPATH: in
- $INSTALLROOT/bin:$INSTALLROOT/lib:*)
- case $SHLIB_PATH: in
- $INSTALLROOT/lib:*)
- x=1
- ;;
- esac
- ;;
- esac
- ;;
- esac
- ;;
- esac
- ;;
- esac
- run=-
- case $x in
- 1) : accept the current package use environment
- OK=ok
- KSH=$EXECROOT/bin/ksh
- MAKE=nmake
- NMAKE=$EXECROOT/bin/$MAKE
- SUM=$EXECROOT/bin/sum
- TEE=$EXECROOT/bin/tee
- INITROOT=$PACKAGEROOT/src/cmd/INIT
- checkcc
- ;;
- *) hosttype=
- case $KEEP_PACKAGEROOT in
- 0) case $action in
- use) PACKAGEROOT=
- case $show in
- echo) exec=echo make=echo show=echo ;;
- esac
- set '' $args
- shift
- case $# in
- 0) ;;
- *) case $1 in
- -|.) ;;
- /*) PACKAGEROOT=$1
- ;;
- *) i=`echo ~$1`
- if packageroot $i
- then PACKAGEROOT=$i
- else for i in `echo $HOME | sed -e 's,/[^/]*$,,'` $usr $use
- do if packageroot $i/$1
- then PACKAGEROOT=$i/$1
- break
- fi
- done
- case $PACKAGEROOT in
- '') hosttype=$1 ;;
- esac
- fi
- ;;
- esac
- shift
- ;;
- esac
- run="$@"
- ;;
- esac
- case $PACKAGEROOT in
- '') PACKAGEROOT=${PWD:-`pwd`} ;;
- esac
- # . must be within the PACKAGEROOT tree
- i=X$PACKAGEROOT
- IFS=/
- set $i
- IFS=$ifs
- while :
- do i=$1
- shift
- case $i in
- X) break ;;
- esac
- done
- case $PACKAGEROOT in
- //*) d=/ ;;
- *) d= ;;
- esac
- case $1 in
- home) k=1 ;;
- *) k=0 ;;
- esac
- for i
- do case $i in
- '') continue ;;
- esac
- d=$d/$i
- case $k in
- 2) k=1
- ;;
- 1) k=0
- ;;
- 0) case $i in
- arch) k=2
- ;;
- *) if packageroot $d
- then PACKAGEROOT=$d
- fi
- ;;
- esac
- ;;
- esac
- done
- ;;
- esac
- INITROOT=$PACKAGEROOT/src/cmd/INIT
- $show PACKAGEROOT=$PACKAGEROOT
- $show export PACKAGEROOT
- export PACKAGEROOT
- # initialize the architecture environment
- case $KEEP_HOSTTYPE in
- 0) hostinfo type
- HOSTTYPE=$_hostinfo_
- ;;
- 1) _PACKAGE_HOSTTYPE_=$HOSTTYPE
- export _PACKAGE_HOSTTYPE_
- ;;
- esac
- $show HOSTTYPE=$HOSTTYPE
- $show export HOSTTYPE
- export HOSTTYPE
- INSTALLROOT=$PACKAGEROOT/arch/$HOSTTYPE
- case $action in
- admin|install|make|read|remove|test|verify|view|write)
- ;;
- *) if test ! -d $INSTALLROOT
- then INSTALLROOT=$PACKAGEROOT
- fi
- ;;
- esac
- $show INSTALLROOT=$INSTALLROOT
- $show export INSTALLROOT
- export INSTALLROOT
- # check the basic package hierarchy
- case $action in
- export|use)
- packageroot $PACKAGEROOT || {
- echo "$command: $PACKAGEROOT: invalid package root directory" >&2
- exit 1
- }
- case $KEEP_HOSTTYPE:$hosttype in
- 0:?*) if test -d ${PACKAGEROOT:-.}/arch/$hosttype
- then KEEP_HOSTTYPE=1
- HOSTTYPE=$hosttype
- else echo "$command: $hosttype: package root not found" >&2
- exit 1
- fi
- ;;
- esac
- ;;
- *) packageroot $PACKAGEROOT || {
- case $KEEP_PACKAGEROOT in
- 1) ;;
- *) echo "$command: $PACKAGEROOT: must be in the package root directory tree" >&2
- exit 1
- ;;
- esac
- }
- case $action in
- admin) ;;
- *) for i in arch arch/$HOSTTYPE
- do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
- done
- for i in lib
- do test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
- done
- ;;
- esac
- # no $INITROOT means INIT already installed elsewhere
- if test -d $INITROOT
- then
- # update the basic package commands
- for i in execrate ignore mamprobe silent
- do test -h $PACKAGEROOT/bin/$i 2>/dev/null ||
- case `ls -t $INITROOT/$i.sh $PACKAGEROOT/bin/$i 2>/dev/null` in
- "$INITROOT/$i.sh"*)
- note update $PACKAGEROOT/bin/$i
- shellmagic
- case $SHELLMAGIC in
- '') $exec cp $INITROOT/$i.sh $PACKAGEROOT/bin/$i || exit
- ;;
- *) case $exec in
- '') {
- echo "$SHELLMAGIC"
- cat $INITROOT/$i.sh
- } > $PACKAGEROOT/bin/$i || exit
- ;;
- *) echo "{
- echo \"$SHELLMAGIC\"
- cat $INITROOT/$i.sh
- } > $PACKAGEROOT/bin/$i"
- ;;
- esac
- ;;
- esac
- $exec chmod +x $PACKAGEROOT/bin/$i || exit
- ;;
- esac
- done
- fi
- ;;
- esac
- path=$PATH
- PATH=$INSTALLROOT/bin:$PACKAGEROOT/bin:$PATH
- checkcc
- PATH=$path
- case $cc in
- ?*) if test -f $INITROOT/hello.c
- then
- # check if $CC (full path $cc) is a cross compiler
- (
- cd "$TMPDIR" || exit 3
- cp $INITROOT/hello.c pkg$$.c || exit 3
- $cc -o pkg$$.exe pkg$$.c > pkg$$.e 2>&1 || {
- if $cc -Dnew=old -o pkg$$.exe pkg$$.c > /dev/null 2>&1
- then echo "$command: ${warn}$CC: must be a C compiler (not C++)" >&2
- else cat pkg$$.e
- echo "$command: ${warn}$CC: failed to compile and link $INITROOT/hello.c -- is it a C compiler?" >&2
- fi
- exit 2
- }
- if ./pkg$$.exe >/dev/null 2>&1
- then code=0
- else code=1
- fi
- rm -f pkg$$.*
- exit $code
- )
- code=$?
- case $code in
- 1) CROSS=1 ;;
- esac
- fi
- ;;
- esac
- EXECTYPE=$HOSTTYPE
- EXECROOT=$INSTALLROOT
- case $CROSS in
- 0) # dll hackery -- why is this so complicated?
- abi=
- case $HOSTTYPE in
- sgi.mips[0123456789]*)
- x=rld
- if executable /lib32/$x || executable /lib64/$x
- then case $INSTALLROOT in
- */sgi.mips[0123456789]*)
- u=`echo $INSTALLROOT | sed -e 's,-[^-/]*$,,' -e 's,.$,,'`
- ;;
- *) u=
- ;;
- esac
- for a in "n=2 v= l=" "n=3 v=N32 l=lib32" "n=4-n32 v=N32 l=lib32" "n=4 v=64 l=lib64"
- do eval $a
- case $v in
- N32) case $n:$HOSTTYPE in
- *-n32:*-n32) ;;
- *-n32:*) continue ;;
- *:*-n32) continue ;;
- esac
- ;;
- esac
- case $l in
- ?*) if executable ! /$l/$x
- then continue
- fi
- ;;
- esac
- case $u in
- '') case $HOSTTYPE in
- sgi.mips$n|sgi.mips$n-*)
- abi="$abi 'd=$INSTALLROOT v=$v'"
- ;;
- *) continue
- ;;
- esac
- ;;
- *) if test -d $u$n
- then abi="$abi 'd=$u$n v=$v'"
- fi
- ;;
- esac
- done
- fi
- ;;
- esac
- case $abi in
- '') abi="'d=$INSTALLROOT v='" ;;
- esac
- p=0
- eval "
- for a in $abi
- do eval \$a
- eval \"
- case \\\$LD_LIBRARY\${v}_PATH: in
- \\\$d/lib:*)
- ;;
- *) x=\\\$LD_LIBRARY\${v}_PATH
- case \\\$x in
- ''|:*) ;;
- *) x=:\\\$x ;;
- esac
- LD_LIBRARY\${v}_PATH=\$d/lib\\\$x
- export LD_LIBRARY\${v}_PATH
- p=1
- ;;
- esac
- \"
- done
- "
- case $LD_LIBRARY_PATH in
- '') ;;
- *) for d in $lib
- do case $HOSTTYPE in
- *64) if test -d ${d}64
- then d=${d}64
- fi
- ;;
- esac
- case :$LD_LIBRARY_PATH: in
- *:$d:*) ;;
- *) if test -d $d
- then LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$d
- p=1
- fi
- ;;
- esac
- done
- ;;
- esac
- case $p in
- 1) $show LD_LIBRARY_PATH=$LD_LIBRARY_PATH
- $show export LD_LIBRARY_PATH
- export LD_LIBRARY_PATH
- ;;
- esac
- case $LIBPATH: in
- $INSTALLROOT/bin:$INSTALLROOT/lib:*)
- ;;
- *) case $LIBPATH in
- '') LIBPATH=/usr/lib:/lib ;;
- esac
- LIBPATH=$INSTALLROOT/bin:$INSTALLROOT/lib:$LIBPATH
- $show LIBPATH=$LIBPATH
- $show export LIBPATH
- export LIBPATH
- ;;
- esac
- case $SHLIB_PATH: in
- $INSTALLROOT/lib:*)
- ;;
- *) SHLIB_PATH=$INSTALLROOT/lib${SHLIB_PATH:+:$SHLIB_PATH}
- $show SHLIB_PATH=$SHLIB_PATH
- $show export SHLIB_PATH
- export SHLIB_PATH
- ;;
- esac
- case $DYLD_LIBRARY_PATH: in
- $INSTALLROOT/lib:*)
- ;;
- *) DYLD_LIBRARY_PATH=$INSTALLROOT/lib${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}
- $show DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
- $show export DYLD_LIBRARY_PATH
- export DYLD_LIBRARY_PATH
- ;;
- esac
- case $_RLD_ROOT in
- $INSTALLROOT/arch*) ;;
- ':') _RLD_ROOT=$INSTALLROOT/arch:/ ;;
- /|*:/) _RLD_ROOT=$INSTALLROOT/arch:$_RLD_ROOT ;;
- *) _RLD_ROOT=$INSTALLROOT/arch:$_RLD_ROOT:/ ;;
- esac
- $show _RLD_ROOT=$_RLD_ROOT
- $show export _RLD_ROOT
- export _RLD_ROOT
- # now set up PATH
- #
- # NOTE: PACKAGEROOT==INSTALLROOT is possible for binary installations
- case $PATH: in
- $PACKAGEROOT/bin:*)
- ;;
- *) PATH=$PACKAGEROOT/bin:$PATH
- ;;
- esac
- case $PATH: in
- $INSTALLROOT/bin:*)
- ;;
- *) PATH=$INSTALLROOT/bin:$PATH
- ;;
- esac
- $show PATH=$PATH
- $show export PATH
- export PATH
- ;;
- *) for i in package proto nmake
- do if onpath $i
- then EXECROOT=`echo $_onpath_ | sed -e 's,//*[^/]*//*[^/]*$,,'`
- EXECTYPE=`echo $EXECROOT | sed -e 's,.*/,,'`
- break
- fi
- done
- case $HOSTTYPE in
- $EXECTYPE)
- OCC=$CC
- CC=cc
- hostinfo type
- EXECTYPE=$_hostinfo_
- case $HOSTTYPE in
- $EXECTYPE)
- echo "$command: $CC: seems to be a cross-compiler" >&2
- echo "$command: set HOSTTYPE to something other than the native $EXECTYPE" >&2
- echo "$command: If not, your $TMPDIR directory may be mounted without execute permission." >&2
- echo "$command: Try exporting TMPDIR as a directory where you can execute binary files." >&2
- exit 1
- ;;
- esac
- ;;
- esac
- $show EXECTYPE=$EXECTYPE
- $show export EXECTYPE
- export EXECTYPE
- ;;
- esac
- $show EXECROOT=$EXECROOT
- $show export EXECROOT
- export EXECROOT
- # use these if possible
- OK=ok
- KSH=$EXECROOT/bin/ksh
- MAKE=nmake
- NMAKE=$EXECROOT/bin/$MAKE
- SUM=$EXECROOT/bin/sum
- TEE=$EXECROOT/bin/tee
- # grab a decent default shell
- checksh "$SHELL" || KEEP_SHELL=0
- case $KEEP_SHELL in
- 0) save_PATH=$PATH
- if PATH=`getconf PATH 2>/dev/null`
- then PATH=$PATH:$path
- else PATH=/bin:/usr/bin:/sbin:/usr/sbin:$path
- fi
- for i in ksh ksh93 mksh yash bash sh
- do if onpath "$i" && checksh "$_onpath_"
- then SHELL=$_onpath_
- KEEP_SHELL=1
- break
- fi
- done
- PATH=$save_PATH
- unset save_PATH
- case $KEEP_SHELL in
- 0) echo "Cannot find good default shell, please supply SHELL=/path/to/shell" >&2
- exit 1 ;;
- esac
- ;;
- esac
- export SHELL
- $show SHELL=$SHELL
- $show export SHELL
- # tame the environment
- case $action in
- use) ;;
- *) ENV=
- ERROR_OPTIONS=
- export ENV ERROR_OPTIONS
- ;;
- esac
- # finalize the views
- case $USER_VPATH in
- '') case $VPATH in
- ?*) IFS=':'
- set '' $VPATH
- shift
- IFS=$ifs
- USER_VPATH=
- for i
- do case $i in
- */arch/$HOSTTYPE) ;;
- */arch/*/*) ;;
- */arch/*) continue ;;
- esac
- if packageroot $i
- then case $USER_VPATH in
- '') USER_VPATH=$i ;;
- ?*) USER_VPATH=$USER_VPATH:$i ;;
- esac
- fi
- done
- esac
- ;;
- esac
- case $USER_VPATH in
- ?*) IFS=':'
- set '' $USER_VPATH
- shift
- IFS=$ifs
- USER_VPATH=
- USER_VPATH_CHAIN=
- p=$PACKAGEROOT
- for i
- do case $i in
- ''|$PACKAGEROOT|$INSTALLROOT)
- ;;
- ?*) USER_VPATH=$USER_VPATH:$i
- USER_VPATH_CHAIN="$USER_VPATH_CHAIN $p $i"
- p=$i
- case $PROTOROOT in
- -) executable $i/bin/mamake && PROTOROOT= ;;
- esac
- ;;
- esac
- done
- ;;
- esac
- ;;
- esac
- PACKAGESRC=$PACKAGEROOT/lib/package
- PACKAGEBIN=$INSTALLROOT/lib/package
- case $action:$run in
- use:-) set '' $args
- shift
- case $# in
- 0) ;;
- *) shift ;;
- esac
- run="$@"
- ;;
- esac
- # HOSTTYPE specific package profile
- if test -r $INSTALLROOT/lib/package/profile
- then . $INSTALLROOT/lib/package/profile
- fi
- # more cygwin hassles
- case $HOSTTYPE in
- cygwin.*)
- lose=
- case $CYGWIN in
- *nontsec*)
- lose=ntsec
- ;;
- *ntsec*);;
- *) exe=$TMPDIR/pkg$$.exe
- rm -f "$exe"
- : > "$exe"
- if test -x "$exe"
- then lose=ntsec
- fi
- ;;
- esac
- case $CYGWIN in
- *nobinmode*)
- case $lose in
- '') lose=binmode ;;
- *) lose="$lose binmode" ;;
- esac
- ;;
- esac
- case $lose in
- ?*) echo "$command: $HOSTTYPE: export '$lose' in CYGWIN or languish in windows" >&2
- exit 1
- ;;
- esac
- ;;
- esac
- # set up the view state
- VIEW_bin=$INSTALLROOT VIEW_src=$PACKAGEROOT VIEW_all="$INSTALLROOT $PACKAGEROOT"
- VPATH=$INSTALLROOT:$PACKAGEROOT$USER_VPATH
- $show VPATH=$VPATH
- $show export VPATH
- export VPATH
- IFS=':'
- set '' $VPATH
- shift
- IFS=$ifs
- for i
- do case $i in
- */arch/*/*)
- VIEW_src="$VIEW_src $i"
- ;;
- */arch/*)
- VIEW_bin="$VIEW_bin $i"
- ;;
- *)
- VIEW_src="$VIEW_src $i"
- ;;
- esac
- VIEW_all="$VIEW_all $i"
- done
- # return 0 if arg in src|bin|all view
- view() # [test] [-|type] [src|bin|all] file
- {
- case $1 in
- -[dfsx])_view_T_=$1; shift ;;
- *) _view_T_=-f ;;
- esac
- case $1 in
- -) _view_t_= ;;
- *) _view_t_=$1 ;;
- esac
- shift
- case $1 in
- all) shift; _view_v_=$VIEW_all ;;
- bin) shift; _view_v_=$VIEW_bin ;;
- src) shift; _view_v_=$VIEW_src ;;
- *) _view_v_=$VIEW_all ;;
- esac
- case $1 in
- /*) if test $_view_T_ $1
- then _view_=$1
- return 0
- fi
- ;;
- *) for _view_d_ in $_view_v_
- do if test $_view_T_ $_view_d_/$1
- then _view_=$_view_d_/$1
- return 0
- fi
- done
- ;;
- esac
- _view_=
- case $_view_t_ in
- ?*) echo $command: $1: $_view_t_ not found >&2 ;;
- esac
- return 1
- }
- # determine the package and targets
- case $action in
- admin) case $admin_action in
- results)action=$admin_action
- set '' $admin_args
- shift;shift
- admin_args="admin $*"
- case $admin_on in
- '') target=$admin_args ;;
- *) target="on $admin_on $admin_args" ;;
- esac
- ;;
- esac
- ;;
- release)set '' $args
- target=
- while :
- do shift
- case $1 in
- -|[0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789])
- target="$target $1"
- ;;
- *) break
- ;;
- esac
- done
- package=$*
- ;;
- setup) # { update read } with optional (bin|fun|include|lib) symlinks
- # flat option sets up { bin fun include lib } symlinks from
- # $INSTALLROOT to $PACKAGEROOT
- # . is the package root
- set '' $args
- shift
- types=
- url=
- while :
- do case $# in
- 0) break ;;
- esac
- case $1 in
- --) shift
- break
- ;;
- flat) flat=1 # backwards compatibility -- documentation dropped
- ;;
- *://*|*.url)
- url=$1
- shift
- break
- ;;
- *) types="$types $1"
- ;;
- esac
- shift
- done
- if test ! -d $PACKAGEROOT/lib/package/tgz
- then $exec mkdir -p $PACKAGEROOT/lib/package/tgz || exit
- fi
- case " $types " in
- *" source "*)
- case " $* " in
- ' ') ;;
- *" INIT "*)
- ;;
- *) view - all src/cmd/INIT ||
- set INIT "$@"
- ;;
- esac
- ;;
- esac
- packages=`$0 $global authorize "$authorize" password "$password" update setup $types $url "$@" PACKAGEROOT=$PACKAGEROOT`
- case $packages in
- ?*) $0 $global read $packages PACKAGEROOT=$PACKAGEROOT
- esac
- exit
- ;;
- *) package=
- target=
- set '' $args
- while :
- do shift
- case $# in
- 0) break ;;
- esac
- case $1 in
- ''|-) target="$target $package"
- package=
- ;;
- *) if view - src "lib/package/$1.pkg"
- then package="$package $1"
- else target="$target $package $1"
- package=
- fi
- ;;
- esac
- done
- ;;
- esac
- # flatten -- assumes symlink support
- case $flat in
- 1) case $action in
- make|read|setup|update|use|view)
- if test ! -d $INSTALLROOT
- then $exec mkdir -p $INSTALLROOT || exit
- fi
- for i in bin include lib fun man share
- do if test ! -d $INSTALLROOT/../../$i
- then $exec mkdir $INSTALLROOT/../../$i
- fi
- if test ! -d $INSTALLROOT/$i
- then if test ! -h $INSTALLROOT/$i
- then $exec ln -s ../../$i $INSTALLROOT/$i
- fi
- elif test ! -h $INSTALLROOT/$i
- then for x in $INSTALLROOT/$i/.[a-z]* $INSTALLROOT/$i/*
- do if test -f $x -o -d $x
- then if test ! -d $INSTALLROOT/$i/$x || test ! -d $INSTALLROOT/../../$i/$x
- then $exec mv $x $INSTALLROOT/../../$i
- fi
- fi
- done
- $exec rm -rf $INSTALLROOT/$i
- $exec ln -s ../../$i $INSTALLROOT/$i
- fi
- done
- ;;
- esac
- ;;
- esac
- # check that cmd args are up to date a.out's
- checkaout() # cmd ...
- {
- case $PROTOROOT in
- -) PROTOROOT=
- case $* in
- ratz) if test -f $INITROOT/ratz.c -a -w $PACKAGEROOT
- then test -f $INITROOT/hello.c || {
- cat > $INITROOT/hello.c <<'!'
- #ifndef printf
- #include <stdio.h>
- #endif
- int main() { int new = 0; printf("hello world\n"); return new;}
- !
- }
- test -f $INITROOT/p.c || {
- cat > $INITROOT/p.c <<'!'
- /*
- * small test for prototyping cc
- */
- int main(int argc, char** argv) { return argc || argv; }
- !
- }
- fi
- ;;
- esac
- test -f $INITROOT/hello.c -a -f $INITROOT/p.c -a -w $PACKAGEROOT || {
- for i
- do onpath $i || {
- echo "$command: $i: command not found" >&2
- return 1
- }
- done
- return 0
- }
- case $cc in
- '') _PACKAGE_cc=0
- ;;
- *) _PACKAGE_cc=1
- test -f $INITROOT/hello.c -a -f $INITROOT/p.c || {
- echo "$command: $INITROOT: INIT package source not found" >&2
- return 1
- }
- executable $INSTALLROOT/bin/nmake || {
- # check for prototyping cc
- # NOTE: proto.c must be K&R compatible
- $CC -c $INITROOT/p.c >/dev/null 2>&1
- c=$?
- rm -f p.*
- test 0 != "$c" && {
- checkaout proto || return
- PROTOROOT=$PACKAGEROOT/proto
- $show PROTOROOT=$PACKAGEROOT/proto
- export PROTOROOT
- INITPROTO=$PROTOROOT/src/cmd/INIT
- note proto convert $PACKAGEROOT/src into $PROTOROOT/src
- if test -d $PACKAGEROOT/src/cmd/nmake
- then dirs="src/cmd/INIT src/lib/libast src/lib/libardir src/lib/libpp src/cmd/probe src/cmd/cpp src/cmd/nmake"
- else dirs="src"
- fi
- (
- if test -f $PROTOROOT/UPDATE
- then newer="-newer $PROTOROOT/UPDATE"
- else newer=""
- fi
- case $exec in
- '') cd $PACKAGEROOT
- find $dirs -name '*.[CcHh]' $newer -print | proto -v -L - -C proto
- ;;
- *) $exec cd $PACKAGEROOT
- $exec "find $dirs -name '*.[CcHh]' $newer -print | proto -L - -C proto"
- ;;
- esac
- $exec touch $PROTOROOT/UPDATE
- )
- VPATH=$INSTALLROOT:$PROTOROOT:$PACKAGEROOT$USER_VPATH
- $show VPATH=$VPATH
- export VPATH
- }
- }
- for i in arch arch/$HOSTTYPE arch/$HOSTTYPE/bin
- do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || return
- done
- ;;
- esac
- ;;
- esac
- case $_PACKAGE_cc in
- '') case $cc in
- '') _PACKAGE_cc=0 ;;
- *) _PACKAGE_cc=1 ;;
- esac
- ;;
- esac
- for i
- do eval j=\$_PACKAGE_AOUT_$i
- case $j in
- '') eval _PACKAGE_AOUT_$i=1 ;;
- *) continue ;;
- esac
- k=$_PACKAGE_cc
- if test -f $INITROOT/$i.c
- then k=${k}1
- else k=${k}0
- fi
- if executable $EXECROOT/bin/$i
- then k=${k}1
- else k=${k}0
- fi
- : $k : compiler : source : binary :
- case $k in
- *00) view - bin/$i && continue ;;
- esac
- case $k in
- 000) echo "$command: $i: not found: download the INIT package $HOSTTYPE binary to continue" >&2
- return 1
- ;;
- 010) echo "$command: $i: not found: set CC=C-compiler or download the INIT package $HOSTTYPE binary to continue" >&2
- return 1
- ;;
- 100) echo "$command: $i: not found: download the INIT package source or $HOSTTYPE binary to continue" >&2
- return 1
- ;;
- 110) case $CROSS in
- 1) echo "$command: $i: not found: make the local $EXECTYPE binary package before $HOSTTYPE" >&2
- return 1
- ;;
- esac
- ;;
- ?01) : accept binary
- continue
- ;;
- 011) : accept binary
- continue
- ;;
- ??1) case $CROSS in
- 1) continue ;;
- esac
- ;;
- esac
- case `ls -t $INITROOT/$i.c $INSTALLROOT/bin/$i 2>/dev/null` in
- "$INITROOT/$i.c"*)
- note update $INSTALLROOT/bin/$i
- if test proto != "$i" && executable $INSTALLROOT/bin/proto
- then case $exec in
- '') $INSTALLROOT/bin/proto -p $INITROOT/$i.c > $i.c || return ;;
- *) $exec "$INSTALLROOT/bin/proto -p $INITROOT/$i.c > $i.c" ;;
- esac
- $exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $i.c || return
- $exec rm -f $i.c
- else if test ! -d $INSTALLROOT/bin
- then for j in arch arch/$HOSTTYPE arch/$HOSTTYPE/bin
- do test -d $PACKAGEROOT/$j || $exec mkdir $PACKAGEROOT/$j || return
- done
- fi
- if test '' != "$PROTOROOT" -a -f $INITPROTO/$i.c
- then $exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $INITPROTO/$i.c || return
- else $exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $INITROOT/$i.c || return
- fi
- case $i:$exec in
- proto:) test -d $INSTALLROOT/include || mkdir $INSTALLROOT/include
- $INSTALLROOT/bin/proto -f /dev/null > $i.c
- cmp -s $i.c $INSTALLROOT/include/prototyped.h 2>/dev/null || cp $i.c $INSTALLROOT/include/prototyped.h
- rm $i.c
- ;;
- esac
- fi
- test -f $i.o && $exec rm -f $i.o
- i=$PATH
- PATH=/bin
- PATH=$i
- ;;
- esac
- done
- return 0
- }
- # check package requirements against received packages
- requirements() # source|binary [ package ]
- {
- case $1 in
- binary) r=$VIEW_BIN ;;
- source) r=$VIEW_SRC ;;
- *) r=$VIEW_ALL ;;
- esac
- shift
- case $1 in
- '') x= ;;
- *) x=$* ;;
- esac
- set ''
- for d in $r
- do set "$@" $d/gen/*.ver
- case $x in
- '') set "$@" $d/gen/*.req
- ;;
- *) for p in $x
- do set "$@" $d/gen/$p.req
- done
- ;;
- esac
- done
- shift
- e=0
- x=$*
- y=
- n=
- set ''
- for i in $x
- do p=`echo $i | sed -e 's,.*/,,' -e 's,\....$,,'`
- if test -f $i
- then set "$@" $i
- y="$y $p"
- else case $p in
- '*') ;;
- *) n="$n $p" ;;
- esac
- fi
- done
- for i in $n
- do case " $y " in
- *" $i "*)
- ;;
- *) echo "$command: $i: must read or write package" >&2
- e=1
- ;;
- esac
- done
- case $e in
- 1) exit 1 ;;
- esac
- shift
- test 0 != "$#" && release=`sort -r "$@" | {
- q=
- e=0
- o=
- while read p v r s
- do q="$q
- $v $r"
- case $p in
- $o) continue ;;
- esac
- case $s in
- 0) e=1
- case $r in
- base) echo "$command: base package $p.$v or newer required" >&2 ;;
- *) echo "$command: delta package $p.$v.$r or newer required" >&2 ;;
- esac
- ;;
- esac
- o=$p
- done
- case $e in
- 0) echo "$q" | sort | { read v r; read v r; echo $v; } ;;
- 1) echo ERROR ;;
- esac
- }`
- case $release in
- ERROR) case $force in
- 0) exit 1 ;;
- esac
- ;;
- ?*) eval `echo $release | sed -e 's,\(.*\)-\(.*\)-\(.*\),yy=\1 mm=\2 dd=\3,'`
- # slide back 4 months
- case $mm in
- 01) mm=09 dd=1 ;;
- 02) mm=10 dd=1 ;;
- 03) mm=11 dd=1 ;;
- 04) mm=12 dd=1 ;;
- 05) mm=01 dd=0 ;;
- 06) mm=02 dd=0 ;;
- 07) mm=03 dd=0 ;;
- 08) mm=04 dd=0 ;;
- 09) mm=05 dd=0 ;;
- 10) mm=06 dd=0 ;;
- 11) mm=07 dd=0 ;;
- 12) mm=08 dd=0 ;;
- esac
- case $dd in
- 1) yy=`expr $yy - 1` ;;
- esac
- release=$yy-$mm-01
- count=1
- lo=$release
- release="-f $release -r $count"
- ;;
- esac
- }
- # write ordered package prerequisite list to the standard output
- order() # [ package ]
- {
- _order_t_=lib/package/tgz
- case $action in
- binary) _order_a_=.$HOSTTYPE ;;
- *) _order_a_= ;;
- esac
- _order_n_=$#
- case $_order_n_ in
- 0) _order_p_=
- for _order_v_ in $VIEW_all
- do for _order_f_ in $_order_v_/lib/package/*.pkg
- do if test -f $_order_f_
- then _order_p_="$_order_p_ $_order_f_"
- fi
- done
- done
- set '' $_order_p_
- shift
- esac
- {
- if test ratz != "$*"
- then for _order_f_ in ratz INIT
- do if view -s - src $_order_t_/$_order_f_$_order_a_.tim
- then echo $_order_f_ $_order_f_
- fi
- done
- fi
- for _order_f_
- do while :
- do view - src $_order_f_ && break
- case $_order_f_ in
- *.pkg) ;;
- *) _order_f_=$_order_f_.pkg; view - src $_order_f_ && break ;;
- esac
- case $_order_f_ in
- */*) ;;
- *) _order_f_=lib/package/$_order_f_; view - src $_order_f_ && break ;;
- esac
- echo "$command: $_order_f_: not a package" >&2
- continue 2
- done
- _order_f_=$_view_
- _order_p_=`echo $_order_f_ | sed -e 's,.*/,,' -e 's,\.pkg$,,'`
- case $_order_n_ in
- 0) view -s - src $_order_t_/$_order_p_$_order_a_.tim || continue ;;
- esac
- echo $_order_p_ $_order_p_
- case $_order_p_ in
- INIT|ratz)
- ;;
- *) echo INIT $_order_p_
- ;;
- esac
- {
- req= req_sep=
- op=::
- while read line
- do IFS=' \\'
- set '' $line
- IFS=$ifs
- while :
- do shift
- case $# in
- 0) break ;;
- esac
- case $1 in
- :*:) op=$1
- ;;
- INIT|'$('*|*')')
- ;;
- *) case $op in
- :REQUIRES:)
- req="$req$req_sep$1"
- req_sep=" "
- ;;
- esac
- ;;
- esac
- done
- done
- for _order_i_ in $req
- do if view - src lib/package/$_order_i_.pkg
- then case $_order_u_ in
- 0) view -s - src $_order_t_/$_order_i_$_order_a_.tim || continue ;;
- esac
- echo $_order_i_ $_order_i_; echo INIT $_order_i_; echo $_order_i_ $_order_p_
- fi
- done
- } < $_order_f_
- done
- } | tsort
- }
- # generate the package component list in _components_
- components() # [ package ]
- {
- _components_=
- for p
- do case $p in
- '') ;;
- INIT) case " $_components_ " in
- *" $p "*) ;;
- *) _components_="$_components_ $p" ;;
- esac
- ;;
- *) if view - src lib/package/$p.pkg
- then p=$_view_
- op=::
- exec < $p
- while read line
- do IFS=' \\'
- set '' $line
- IFS=$ifs
- while :
- do shift
- case $# in
- 0) break ;;
- esac
- case $1 in
- :*:) op=$1
- ;;
- INIT|'$('*|*')')
- ;;
- *) case $op in
- :PACKAGE:)
- case " $_components_ " in
- *" $1 "*) ;;
- *) _components_="$_components_ $1" ;;
- esac
- ;;
- esac
- ;;
- esac
- done
- done
- exec < /dev/null
- elif test -d $PACKAGEROOT/src/cmd/$p -o -d $PACKAGEROOT/src/lib/$p
- then _components_="$_components_ $p"
- else echo "$command: $p: package or component not found" >&2
- exit 1
- fi
- ;;
- esac
- done
- }
- # list main environment values
- showenv()
- {
- case $1 in
- ''|make)for __i__ in CC SHELL $env
- do eval echo $__i__='$'$__i__
- done
- ;;
- esac
- }
- # capture command output
- capture() # file command ...
- {
- case $make:$noexec in
- :) case $action in
- install|make|view)
- o=$action
- ;;
- *) case $package in
- ''|*' '*)
- o=$action
- ;;
- *) o=$package
- ;;
- esac
- ;;
- esac
- case $action in
- write) d=$PACKAGESRC/gen ;;
- *) d=$PACKAGEBIN/gen ;;
- esac
- test -d $d || $exec mkdir $d
- o=$d/$o
- case $o in
- $output)o=$o.out
- s=
- ;;
- *) output=$o
- if test -f $o.old
- then mv $o.old $o.out.1
- if test -f $o.out
- then mv $o.out $o.out.2
- fi
- elif test -f $o.out
- then for i in `ls -t $o.out.? 2>/dev/null`
- do break
- done
- case $i in
- *.1) i=2 ;;
- *.2) i=3 ;;
- *.3) i=4 ;;
- *.4) i=5 ;;
- *.5) i=6 ;;
- *.6) i=7 ;;
- *.7) i=8 ;;
- *.8) i=9 ;;
- *) i=1 ;;
- esac
- mv $o.out $o.out.$i
- fi
- o=$o.out
- : > $o
- note $action output captured in $o
- s="$command: $action start at `date` in $INSTALLROOT"
- case $quiet in
- 0) trap "echo \"$command: $action done at \`date\`\" in $INSTALLROOT 2>&1 | \$TEE -a $o" 0 1 2 ;;
- *) trap "echo \"$command: $action done at \`date\`\" in $INSTALLROOT >> $o" 0 1 2 ;;
- esac
- ;;
- esac
- case $quiet in
- 0) if executable ! $TEE
- then TEE=tee
- fi
- # Connect 'tee' to a FIFO instead of a pipe, so that the build is invoked from
- # the main shell environment and its exit status can be used for $error_status
- rm -f $o.fifo
- mkfifo -m 600 $o.fifo || exit
- (
- sleep 1
- # unlink early
- exec rm $o.fifo
- ) &
- $TEE -a $o < $o.fifo &
- {
- case $s in
- ?*) echo "$s" ;;
- esac
- showenv $action
- "$@"
- } < /dev/null > $o.fifo 2>&1
- ;;
- *) {
- case $s in
- ?*) echo "$s" ;;
- esac
- showenv $action
- "$@"
- } < /dev/null > $o 2>&1
- ;;
- esac
- ;;
- *) $make "$@"
- ;;
- esac
- exit_status=$?
- if test "$exit_status" -gt "$error_status"
- then error_status=$exit_status
- fi
- }
- package_install() # dest sum
- {
- dest=$1 sum=$2
- ot=
- code=0
- sed -e '/ /!d' -e 's,[^ ]* ,,' -e 's, \(arch/[^/]*\)/, \1 ,' -e '/ arch\//!s,^[^ ]* [^ ]* [^ ]*,& .,' -e 's,/\([^ /]*\)$, \1,' $sum |
- while read mode user group arch dir file
- do case $flat:$arch in
- 1:*|?:.)t=$dest/$dir ;;
- *) t=$dest/$arch/$dir ;;
- esac
- case $t in
- $ot) ;;
- *) if test ! -d "$t"
- then $exec mkdir -p "$t" || exit
- fi
- ot=$t
- ;;
- esac
- case $file in
- ?*) case $arch in
- .) f=$dir/$file ;;
- *) f=$arch/$dir/$file ;;
- esac
- if test -f "$f"
- then t=$t/$file
- case $quiet in
- 0) echo "$t" ;;
- esac
- $exec cp -f "$f" "$t" || code=1
- $exec chmod $mode "$t" || code=1
- fi
- ;;
- esac
- done
- return $code
- }
- package_verify() # sum
- {
- $exec $SUM -cp $1
- }
- make_recurse() # dir
- {
- for _make_recurse_j in $makefiles
- do if view - $1/$_make_recurse_j
- then return
- fi
- done
- }
- get() # host path [ file size ]
- {
- case $HURL in
- '') HURL=.
- for i in wget lynx curl
- do if onpath $i
- then HURL=$i
- break;
- fi
- done
- AUTHORIZE="User-Agent: package AT&T Research\\r\\n"
- case $HURL:$authorize in
- .:?*) AUTHORIZE="${AUTHORIZE}Authorization: Basic `print -n -r -- $authorize:$password | uuencode -h -x base64`\\r\\n" ;;
- esac
- ;;
- esac
- getfd=8
- case $3 in
- '') case $HURL in
- .) host=$1
- path=$2
- while :
- do eval "exec $getfd<> /dev/tcp/$host/80" || exit
- case $path in
- /*) ;;
- *) path=/$path ;;
- esac
- print "GET $path HTTP/1.0\\r\\nHost: $host\\r\\n$AUTHORIZE\\r" >&$getfd
- cat <&8 > get.tmp
- got=`sed -e 1q get.tmp`
- case $got in
- *" "200" "*)
- got=`sed -e '1,/^.$/d' -e '/^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]/!d' get.tmp`
- : > get.err
- code=0
- break
- ;;
- *" "30[123]" "*)
- got=`sed -e '/^Location: /!d' -e 's,^Location: \(.*\)://\([^/]*\)\(/.*\),prot='\''\1'\'' host='\''\2'\'' path='\''\3'\'',' get.tmp`
- case $got in
- '') rm get.tmp
- echo "$command: $action: $url: redirect error" >&2
- exit 1
- ;;
- esac
- eval $got
- ;;
- *) rm get.tmp
- echo "$command: $action: $url: $got" >&2
- echo '' "$got" > get.err
- code=1
- break
- ;;
- esac
- done
- ;;
- curl) case $authorize in
- '') curl -s -L -o get.tmp http://$1/$2 2> get.err; code=$? ;;
- *) curl -s -L -o get.tmp -u "$authorize":"$password" http://$1/$2 2> get.err; code=$? ;;
- esac
- got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp 2>/dev/null`
- case $code in
- 0) if grep '^<H1>Authorization Required</H1>' get.tmp > get.err
- then code=1
- fi
- ;;
- esac
- ;;
- hurl) case $authorize in
- '') hurl http://$1/$2 > get.tmp 2> get.err; code=$? ;;
- *) hurl -a "$authorize":"$password" http://$1/$2 > get.tmp 2> get.err; code=$? ;;
- esac
- got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp`
- ;;
- lynx) case $authorize in
- '') lynx -source http://$1/$2 > get.tmp 2> get.err; code=$? ;;
- *) lynx -source -auth "$authorize":"$password" http://$1/$2 > get.tmp 2> get.err; code=$? ;;
- esac
- got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp`
- ;;
- wget) wget -nv -O get.tmp ${authorize:+--http-user="$authorize"} ${password:+--http-passwd="$password"} http://$1/$2 2> get.err
- code=$?
- got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp 2>/dev/null`
- ;;
- *) echo $command: $action: $HURL: url get command not found >&2
- exit 1
- ;;
- esac
- if test 0 != "$code"
- then case `cat get.err get.tmp 2>/dev/null` in
- *[Aa][Uu][Tt][Hh][Oo][Rr][Ii][SsZz]*|*[Dd][Ee][Nn][Ii][Ee][Dd]*)
- echo $command: $action: authorization required -- see $url for license acceptance authorization name and password >&2
- ;;
- *) cat get.err
- ;;
- esac
- rm -f get.tmp get.err
- echo $command: $action: $2: download failed >&2
- exit 1
- fi
- rm -f get.tmp get.err
- ;;
- *) case $exec in
- '') echo "$3 ($4 bytes):" >&2
- case $HURL in
- .) eval "exec $getfd<> /dev/tcp/$1/80" || exit
- path=$2/$3
- case $path in
- /*) ;;
- *) path=/$path ;;
- esac
- print "GET $path HTTP/1.0\\r\\nHost: $host\\r\\n$AUTHORIZE\\r" >&$getfd
- read got <&$getfd
- case $got in
- *" 200 "*)
- code=0
- : > get.err
- ;;
- *) echo '' "$got" > get.err
- code=1
- ;;
- esac
- while read got <&$getfd
- do case $got in
- ''|?) break ;;
- esac
- done
- cat <&$getfd > get.tmp
- ;;
- curl) case $authorize in
- '') curl -s -L -o get.tmp http://$1/$2/$3 2> get.err; code=$? ;;
- *) curl -s -L -o get.tmp -u "$authorize":"$password" http://$1/$2/$3 2> get.err; code=$?
- esac
- case $code in
- 0) if grep '^<H1>Authorization Required</H1>' get.tmp > get.err
- then code=1
- fi
- ;;
- esac
- ;;
- hurl) case $authorize in
- '') ksh -x hurl http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
- *) ksh -x hurl -a "$authorize":"$password" http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
- esac
- ;;
- lynx) case $authorize in
- '') lynx -source http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
- *) lynx -source -auth "$authorize":"$password" http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
- esac
- ;;
- wget) wget -nv -O get.tmp ${authorize:+--http-user="$authorize"} ${password:+--http-passwd="$password"} http://$1/$2/$3 2> get.err
- code=$?
- ;;
- *) echo $command: $action: $HURL: url get command not found >&2
- exit 1
- ;;
- esac
- if test 0 != "$code"
- then case `cat get.err get.tmp` in
- *[Aa][Uu][Tt][Hh][Oo][Rr][Ii][SsZz]*|*[Dd][Ee][Nn][Ii][Ee][Dd]*)
- echo $command: $action: authorization required -- see $url for license acceptance authorization name and password >&2
- ;;
- *) cat get.err
- ;;
- esac
- rm get.tmp get.err
- echo $command: $action: $3: download failed >&2
- exit 1
- fi
- rm get.err
- case $checksum:$5 in
- :*|*:-) z=`wc -c < get.tmp`
- case " $z " in
- *" $4 "*)
- ;;
- *) rm -f get.tmp
- echo $command: $3: download error: expected $4 bytes, got $z >&2
- exit 1
- ;;
- esac
- ;;
- *) z=`$checksum < get.tmp | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'`
- case " $z " in
- *" $5 "*)
- ;;
- *) rm -f get.tmp
- echo $command: $3: download $checksum error: expected $5, got $z >&2
- exit 1
- ;;
- esac
- ;;
- esac
- mv get.tmp $3 || exit
- ;;
- *) echo "$3 ($4 bytes)" >&2
- ;;
- esac
- esac
- }
- # generate copyright notice
- copyright()
- {
- if test -f $1.lic
- then echo $1 package general copyright notice
- echo
- proto -c'#' -p -s -l $1.lic -o type=verbose,author='*' /dev/null
- return 0
- fi
- case $1 in
- *-*) eval `echo '' $1 | sed 's/\([^-]*\)-\(.*\)/__j__="\1" __i__="\2"/'`
- if copyright $__i__ || copyright $__j__
- then return 0
- fi
- ;;
- esac
- return 1
- }
- # run remote make on host
- remote() # host no-exec-background
- {
- host=$1
- background=$2
- eval name=\$${host}_name user=\$${host}_user snarf=\$${host}_snarf type=\$${host}_type rsh=\$${host}_rsh root=\$${host}_root keep=\$${host}_keep log=\$${host}_log
- case $keep in
- 1*) ;;
- *) return ;;
- esac
- case $host in
- $main) ;;
- *) case $exec in
- '') exec > $admin_log/$log 2>&1 ;;
- *) echo "exec > $admin_log/$log 2>&1" ;;
- esac
- ;;
- esac
- if $admin_ping $name >/dev/null 2>&1 || $admin_ping $name >/dev/null 2>&1
- then cmd=". ./.profile"
- case $root in
- .) root=
- ;;
- *) cmd="$cmd && cd $root"
- root=$root/
- ;;
- esac
- cmd="$cmd && { test -f lib/package/admin/$admin_env && . ./lib/package/admin/$admin_env || true ;} && PATH=\${PWD:-\`pwd\`}/bin:\$PATH \${SHELL:-/bin/sh} -c 'package $admin_args PACKAGEROOT=\${PWD:-\`pwd\`} HOSTTYPE=$type VPATH='"
- case $admin_binary in
- '') snarf= ;;
- esac
- case $snarf in
- '') $exec $rsh $user$name "$cmd" $background
- ;;
- *?) rcp=`echo $rsh | sed 's/\(.\).*/\1/'`cp
- case $background in
- ?*) $exec "{" ;;
- esac
- $exec $rsh $user$name "$cmd"
- eval lst=$admin_list
- case $admin_pkgs in
- '') filter=cat ;;
- *) filter="egrep lib/package/tgz/($admin_pkgs)\\." ;;
- esac
- if $exec $rcp $user$name:${root}lib/package/tgz/$lst $PACKAGESRC/tgz
- then $exec $rcp `$filter $PACKAGESRC/tgz/$lst | sed "s,^,$user$name:,"` $PACKAGESRC/tgz
- else echo "$command: $user$name:${root}lib/package/tgz/$lst: not found" >&2
- fi
- case $background in
- ?*) $exec "} $background" ;;
- esac
- ;;
- esac
- else echo "$command: $name: down" >&2
- fi
- }
- # update package_src
- checksrc()
- {
- case $package_src in
- '') package_src=$src
- for _i_ in `cd $PACKAGESRC; ls *.def *.lic *.pkg 2>/dev/null | sed 's/[-.].*//'`
- do case " $package_src " in
- *" $_i_ "*)
- ;;
- *) package_src="$package_src $_i_"
- ;;
- esac
- done
- ;;
- esac
- }
- # check for native ascii 0:yes 1:no
- __isascii__=
- isascii()
- {
- case $__isascii__ in
- '') case `echo A | od -o | sed -e 's/[ ]*$//' -e '/[ ]/!d' -e 's/.*[ ]//'` in
- 005101|040412) __isascii__=0 ;;
- *) __isascii__=1 ;;
- esac
- esac
- return $__isascii__
- }
- error_status=0
- case $action in
- admin) while test ! -f $admin_db
- do case $admin_db in
- /*) echo $command: $action: $admin_db: data file not found >&2
- exit 1
- ;;
- esac
- view file src lib/package/admin/$admin_db || exit 1
- admin_db=$_view_
- done
- admin_components=
- case $admin_action in
- list) cat $admin_db
- exit
- ;;
- test) set $admin_args
- while :
- do case $# in
- 1) break ;;
- esac
- shift
- case $1 in
- *=*) ;;
- *) admin_components=-$1
- break
- ;;
- esac
- done
- ;;
- esac
- : all work done in $PACKAGESRC/admin
- cd $PACKAGESRC/admin || exit
- checksrc
- packages=
- admin_log=${admin_action}${admin_components}.log
- exec < $admin_db || exit
- test -d $admin_log || $exec mkdir $admin_log || exit
- case $admin_on in
- '') admin_on="*" ;;
- esac
- hostname=
- hosts=
- logs=
- local_hosts=
- local_types=
- pids=
- remote_hosts=
- sync_hosts=
- admin_host=_admin_host_
- admin_out=
- case " $admin_args " in
- *" write binary "*|*" write "*" binary "*)
- admin_binary=1
- ;;
- *) admin_binary=
- ;;
- esac
- case $only in
- 1) admin_args="only $admin_args" ;;
- esac
- trap 'kill $pids >/dev/null 2>&1' 1 2 3 15
- index=0
- while read type host root date time make test write owner attributes
- do case $type in
- ''|'#'*);;
- *=*) eval "$type $host $root $date $time $make $test $write $owner $attributes"
- ;;
- *) case $admin_action in
- make|test|write)
- eval f='$'$admin_action
- case $f in
- *[!0123456789]*) continue ;;
- esac
- ;;
- esac
- rsh=rsh
- case $host in
- *@*) IFS=@
- set '' $host
- IFS=$ifs
- user=${2}@
- host=$3
- ;;
- *) user=
- ;;
- esac
- : type=$type host=$host root=$root date=$date time=$time make=$make test=$test write=$write :
- name=$host
- host=`echo $name | sed 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789],__,g'`
- eval x='$'${host}_index
- eval ${host}_index=1
- case $x in
- 1) i=0
- while :
- do case $i in
- $index) h=''
- break
- ;;
- esac
- i=`expr $i + 1`
- eval h='$'${admin_host}${i}_name
- case $h in
- $host) host=${admin_host}${i}
- eval user='$'${host}_user root='$'${host}_rsh:$host:'$'${host}_root
- break
- ;;
- esac
- done
- ;;
- esac
- case $root in
- *:$name:*)root=`echo '' $root | sed 's,:.*,:,'` ;;
- esac
- case $root in
- *:*:*) index=`expr $index + 1`
- host=${admin_host}$index
- ;;
- *:*) case " $sync_hosts " in
- *" $name ${admin_host}"*)
- set '' '' $sync_hosts
- while :
- do shift
- shift
- case $1 in
- $name) host=$2
- break
- ;;
- esac
- done
- ;;
- *) index=`expr $index + 1`
- host=${admin_host}$index
- sync_hosts="$sync_hosts $name $host"
- ;;
- esac
- ;;
- *) index=`expr $index + 1`
- host=${admin_host}$index
- ;;
- esac
- case $root in
- -*) continue
- ;;
- *:*) case $admin_all in
- 0) continue ;;
- esac
- case $root in
- *:) root=${root}. ;;
- esac
- IFS=:
- set '' $root
- IFS=$ifs
- sync=$host
- case $hostname in
- '') hostinfo name
- hostname=$_hostinfo_
- ;;
- esac
- shift
- case $# in
- 0) ;;
- 1) root=$1
- ;;
- 2) rsh=$1 root=$2
- ;;
- *) rsh=$1 sync=$2 root=$3
- case $sync in
- ${admin_host}*)
- ;;
- ?*) case " $sync_hosts " in
- *" $sync ${admin_host}"*)
- set '' '' $sync_hosts
- while :
- do shift
- shift
- case $1 in
- $sync) sync=$2
- break
- ;;
- esac
- done
- ;;
- *) index=`expr $index + 1`
- x=${admin_host}$index
- sync_hosts="$sync_hosts $sync $x"
- sync=$x
- ;;
- esac
- ;;
- esac
- ;;
- esac
- ;;
- *) sync=
- ;;
- esac
- case $name in
- $admin_on)
- keep=1
- ;;
- *) case " $admin_on " in
- *" $name "*) keep=1 ;;
- *) keep=0 ;;
- esac
- ;;
- esac
- case " $admin_out " in
- *" $name "*)
- log=$name.$type
- ;;
- *) admin_out="$admin_out $name"
- log=$name
- ;;
- esac
- case $sync in
- '') local_types="$local_types $type" ;;
- esac
- case $sync in
- $host) remote_hosts="$remote_hosts $host"
- ;;
- ?*) eval ${sync}_share=\"\$${sync}_share $host\"
- ;;
- '') local_hosts="$local_hosts $host"
- ;;
- esac
- eval ${host}_name='$'name ${host}_type='$'type ${host}_user='$'user ${host}_sync='$'sync ${host}_snarf='$'sync ${host}_rsh='$'rsh ${host}_root='$'root ${host}_keep='$'keep ${host}_log='$'log
- ;;
- esac
- done
- p=
- for i in $admin_args
- do p="$i $p"
- done
- admin_pkgs=
- for i in $p
- do if view - src "lib/package/$i.pkg"
- then case $admin_pkgs in
- '') admin_pkgs="$i" ;;
- *) admin_pkgs="$admin_pkgs|$i" ;;
- esac
- fi
- done
- : "admin_binary :" $admin_binary
- : "admin_args :" $admin_args
- : "admin_pkgs :" $admin_pkgs
- : "admin_on :" "$admin_on"
- : "local_hosts :" $local_hosts
- : "local_types :" $local_types
- : "remote_hosts :" $remote_hosts
- : "sync_hosts :" $sync_hosts
- : "sync_share :" $sync_share
- case $admin_binary in
- 1) admin_bin_types=
- admin_bin_main=
- for main in $local_hosts $remote_hosts
- do eval share=\$${main}_share keep=\$${main}_keep
- case $keep in
- 0*) continue ;;
- esac
- for host in $main $share
- do case " $admin_bin_hosts " in
- *" $host "*)
- continue
- ;;
- esac
- eval type=\$${host}_type
- case " $admin_bin_types " in
- *" $type "*)
- continue
- ;;
- esac
- case " $types " in
- " ") ;;
- *" $type "*)
- ;;
- *) continue
- ;;
- esac
- admin_bin_hosts="$admin_bin_hosts $host"
- admin_bin_types="$admin_bin_types $type"
- case " $admin_bin_hosts " in
- *" $main "*)
- ;;
- *) case " $admin_bin_main " in
- *" $main "*)
- ;;
- *) admin_bin_main="$admin_bin_main $main"
- ;;
- esac
- ;;
- esac
- done
- done
- local=
- remote=
- for host in $admin_bin_main $admin_bin_hosts
- do case " $local_hosts " in
- *" $host "*)
- local="$local $host"
- ;;
- *) case " $remote_hosts " in
- *" $host "*)
- remote="$remote $host"
- ;;
- esac
- ;;
- esac
- done
- local_hosts=$local
- remote_hosts=$remote
- ;;
- esac
- for host in $remote_hosts $local_hosts
- do eval share=\$${host}_share
- case $share in
- ?*) while :
- do oshare=$share
- for s in $share
- do eval r='$'${s}_share
- case $r in
- ?*) case " $share " in
- *" $r "*) ;;
- *) share="$share $r" ;;
- esac
- ;;
- esac
- done
- case $share in
- $oshare) eval ${host}_share="'$share'"
- break
- ;;
- esac
- done
- ;;
- esac
- done
- for host in $remote_hosts
- do eval type=\$${host}_type
- case " $local_types " in
- *" $type "*)
- eval ${host}_snarf=
- ;;
- esac
- eval name=\$${host}_name keep=\$${host}_keep share=\$${host}_share
- for share in $share
- do eval type=\$${share}_type keep=\$keep\$${share}_keep
- case " $local_types " in
- *" $type "*)
- eval ${share}_snarf=
- ;;
- esac
- done
- case $keep in
- 0*1*) keep=2$keep ;;
- *1*) ;;
- *) keep=0 ;;
- esac
- eval ${host}_keep=$keep
- done
- for host in $remote_hosts $local_hosts
- do eval name=\$${host}_name user=\$${host}_user type=\$${host}_type sync=\$${host}_sync snarf=\$${host}_snarf share=\$${host}_share rsh=\$${host}_rsh root=\$${host}_root keep=\$${host}_keep
- case $keep in
- 0*) continue ;;
- esac
- case $sync in
- '') case $admin_action in
- ditto) continue ;;
- esac
- case $admin_binary in
- 1) case $keep in
- 1*|?*1*);;
- *) continue ;;
- esac
- ;;
- esac
- ;;
- esac
- eval main_log='$'${host}_log
- main=
- share_keep=
- for i in $host $share
- do eval n='$'${i}_name t='$'${i}_type q='$'${i}_sync s='$'${i}_snarf l='$'${i}_log k='$'${i}_keep
- case $main:$k in
- :*) ;;
- *:0) continue ;;
- esac
- case $admin_binary in
- 1) case $s:$q in
- :?*) continue ;;
- esac
- case " $admin_bin_hosts " in
- *" $i "*)
- ;;
- *) continue
- ;;
- esac
- ;;
- esac
- case $main in
- '') main=$i ;;
- *) share_keep="$share_keep $i" ;;
- esac
- echo package "$admin_args" "[ $n $t ]"
- case $exec in
- '') : > $admin_log/$l ;;
- *) $exec ": > $admin_log/$l" ;;
- esac
- done
- host=$main
- share=$share_keep
- case $force in
- 0) admin_ditto_update=--update ;;
- *) admin_ditto_update= ;;
- esac
- case $exec in
- '') {
- case $admin_binary:$sync in
- :?*) eval syncname='$'${sync}_name
- test -x $PACKAGEROOT/bin/package && $admin_ditto $admin_ditto_update --remote=$rsh --expr="name=='package'" $PACKAGEROOT/bin $user$syncname:$root/bin
- test -d $PACKAGESRC && $admin_ditto $admin_ditto_update --remote=$rsh --expr="if(level>1&&path!='LICENSES/*')status=SKIP;path=='LICENSES*|*.(pkg|lic|def)'" $PACKAGESRC $user$syncname:$root/lib/package
- for dir in $package_src
- do case $MAKESKIP in
- '') expr="--expr=if(name=='$admin_ditto_skip')status=SKIP" ;;
- *) expr="--expr=if(name=='$admin_ditto_skip'||level==1&&name=='$MAKESKIP')status=SKIP" ;;
- esac
- test -d $PACKAGEROOT/src/$dir && $admin_ditto $admin_ditto_update --remote=$rsh "$expr" $PACKAGEROOT/src/$dir $user$syncname:$root/src/$dir
- done
- ;;
- esac
- case $admin_action in
- ditto) ;;
- ?*) pids=
- set '' $host $share
- while :
- do shift
- case $# in
- 0) break
- ;;
- 1) remote $1
- ;;
- *) remote $1 &
- pids="$pids $!"
- ;;
- esac
- done
- case $pids in
- ?*) wait $pids ;;
- esac
- ;;
- esac
- } < /dev/null > $admin_log/$main_log 2>&1 &
- pids="$pids $!"
- ;;
- *) echo "{"
- case $admin_binary:$sync in
- :?*) eval syncname='$'${sync}_name
- test -d $PACKAGESRC && echo $admin_ditto $admin_ditto_update --remote=$rsh --expr="if(level>1)status=SKIP;name=='*.(pkg|lic|def)'" $PACKAGESRC $user$syncname:$root/lib/package
- for dir in $package_src
- do case $MAKESKIP in
- '') expr="--expr=if(name=='$admin_ditto_skip')status=SKIP" ;;
- *) expr="--expr=if(name=='$admin_ditto_skip'||level==1&&name=='$MAKESKIP')status=SKIP" ;;
- esac
- test -d $PACKAGEROOT/src/$dir && echo $admin_ditto $admin_ditto_update --remote=$rsh "$expr" $PACKAGEROOT/src/$dir $user$syncname:$root/src/$dir
- done
- ;;
- esac
- case $admin_action in
- ditto) ;;
- ?*) pids=
- set '' $host $share
- while :
- do shift
- case $# in
- 0) break
- ;;
- 1) remote $1
- ;;
- *) remote $1 "&"
- pids=1
- ;;
- esac
- done
- case $pids in
- 1) echo wait ;;
- esac
- ;;
- esac
- echo "} < /dev/null > $admin_log/$main_log 2>&1 &"
- ;;
- esac
- eval name='$'${main}_name
- hosts="$hosts $name"
- logs="$logs $main_log"
- for share in $share
- do eval keep=\$${share}_keep
- case $keep in
- 1) eval name='$'${share}_name log='$'${share}_log
- hosts="$hosts $name"
- logs="$logs $log"
- ;;
- esac
- done
- done
- case $exec in
- '') # track the progress
- case $quiet in
- 0) cd $admin_log
- tail -t $PACKAGE_admin_tail_timeout -f $logs
- cd ..
- ;;
- esac
- # wait for the remote actions to complete
- wait
- trap - 1 2 3 15
- # update the db
- exec < $admin_db || exit
- exec 9>&1
- D=`date +%y%m%d`
- while read line
- do set -- $line
- case $1 in
- ''|'#'*|*=*)
- ;;
- *) case " $hosts " in
- *" $2 "*)
- : ast date command assumed :
- E=`eval date -E \`egrep '[ ](start|done)[ ][ ]*at[ ]' $admin_log/$2 | sed -e 's/.*[ ][ ]*at[ ][ ]*//' -e 's/[ ][ ]*in[ ].*$//' -e 's/.*/"&"/'\``
- M=$6 T=$7 W=$8
- case $admin_action in
- make|view)
- M=`egrep -c ']:.* (\*\*\*.* code|don'\''t know) | \*\*\* termination code ' $admin_log/$2` ;;
- test) T=`grep -ci 'fail[es]' $admin_log/$2` ;;
- *) W=`grep '^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*:.' $admin_log/$2 | egrep -cv 'start at|done at|output captured|warning:|: package not found|whence: command not found'` ;;
- esac
- case $1 in
- ?|??|???|????|?????|??????|???????)
- t1=' '
- ;;
- ????????|?????????|??????????|???????????|????????????|?????????????|??????????????|???????????????)
- t1=' '
- ;;
- *) t1=''
- ;;
- esac
- case $2 in
- ?|??|???|????|?????|??????|???????)
- t2=' '
- ;;
- *) t2=''
- ;;
- esac
- case $3 in
- ?|??|???|????|?????|??????|???????)
- t3=' '
- ;;
- *) t3=''
- ;;
- esac
- case $E in
- ?????) E=" $E" ;;
- ????) E=" $E" ;;
- ???) E=" $E" ;;
- ??) E=" $E" ;;
- ?) E=" $E" ;;
- esac
- case $M in
- ???) M="$M" ;;
- ??) M=" $M" ;;
- ?) M=" $M" ;;
- '') M=" 0" ;;
- esac
- case $T in
- ???) T="$T" ;;
- ??) T=" $T" ;;
- ?) T=" $T" ;;
- '') T=" 0" ;;
- esac
- case $W in
- ???) W="$W" ;;
- ??) W=" $W" ;;
- ?) W=" $W" ;;
- '') W=" 0" ;;
- esac
- A=$1$t1
- H=$2$t2
- R=$3$t3
- case $# in
- [0-8]) O=
- K=
- ;;
- *) shift 8
- O=$1
- K=$2
- case $O in
- ''|?|??|???) K=" $K" ;;
- esac
- case $# in
- [0-2]) ;;
- *) K="$K $*" ;;
- esac
- ;;
- esac
- echo "$A $H $R $D $E $M $T $W $O $K"
- echo "$A $H $R $D $E $M $T $W $O $K" >&9
- continue
- ;;
- esac
- ;;
- esac
- echo "$line"
- done > $admin_db.new
- mv $admin_db $admin_db.old
- mv $admin_db.new $admin_db
- ;;
- esac
- ;;
- clean|clobber)
- cd $PACKAGEROOT
- $exec rm -rf arch/$HOSTTYPE
- if test "$flat" = 1
- then $exec rm -rf \
- bin/.paths \
- bin/ar \
- bin/cc \
- bin/crossexec \
- bin/ditto \
- bin/filter \
- bin/hurl \
- bin/iffe \
- bin/ksh \
- bin/mamake \
- bin/mktest \
- bin/ok/ \
- bin/proto \
- bin/pty \
- bin/ratz \
- bin/regress \
- bin/release \
- bin/rt \
- bin/shcomp \
- bin/suid_exec \
- bin/*.old \
- fun/ \
- include/ \
- lib/file/ \
- lib/lib/ \
- lib/libast.a \
- lib/libcmd.a \
- lib/libdll.a \
- lib/libshell.a \
- lib/libsum.a \
- lib/*.old \
- lib/make/ \
- lib/package/gen/ \
- lib/probe/ \
- man/
- fi
- exit
- ;;
- contents|list)
- # all work in $PACKAGESRC
- cd $PACKAGESRC
- # generate the package list
- set '' $target $package
- shift
- argc=$#
- case $# in
- 0) set '' *.pkg
- case $2 in
- '*.pkg')
- echo $command: $action: no packages >&2
- exit 1
- ;;
- esac
- set '' `echo $* | sed 's,\.pkg,,g'`
- shift
- ;;
- esac
- sep="$nl "
- echo packages in $PACKAGEROOT
- case $action in
- list) echo
- echo "NAME${nl}VERSION${nl}RELEASE${nl}TYPE${nl}STATUS${nl}REQUIRES${nl}----${nl}-------${nl}-------${nl}----${nl}------${nl}--------" | pr -6 -a -o4 -t
- ;;
- esac
- {
- omit=:
- for pkg
- do if test ! -f $pkg.pkg
- then echo $command: $action: $pkg: not a package >&2
- else if test -f gen/$pkg.ver
- then set '' `cat gen/$pkg.ver`
- case $3 in
- $2) ver=base ;;
- *) ver=$3 ;;
- esac
- if test -s tgz/$pkg.tim
- then sts=local
- else sts=
- fi
- else ver=
- sts=unwritten
- fi
- typ=
- txt=
- cmp= cmp_sep=
- req= req_sep=
- op=::
- exec < $pkg.pkg
- while read line
- do IFS=' \\'
- set '' $line
- IFS=$ifs
- while :
- do shift
- case $# in
- 0) break ;;
- esac
- case $1 in
- :*:) op=$1
- ;;
- INIT|'$('*|*')')
- ;;
- *) case $op in
- :DESCRIPTION:)
- txt="$txt$sep$line"
- break
- ;;
- :PACKAGE:)
- cmp="$cmp$cmp_sep$1"
- cmp_sep=$nl
- ;;
- :REQUIRES:)
- req="$req$req_sep$1"
- req_sep=" "
- ;;
- esac
- ;;
- esac
- done
- done
- exec < /dev/null
- case $txt in
- ?*) txt="$nl$txt" ;;
- esac
- case :$ver: in
- *::*) ;;
- *) case $action in
- list) case $sts in
- '') case `ls -t "tgz/$pkg.$ver.base" "tgz/$pkg.tim" 2>/dev/null` in
- "tgz/$pkg.tim"*)
- sts=read
- ;;
- *) sts=unread
- ;;
- esac
- ;;
- esac
- echo "$pkg${nl}$ver${nl}base${nl}$typ${nl}$sts${nl}$req"
- case $typ in
- '') omit=$omit$pkg.$ver.base: ;;
- esac
- ;;
- *) case $req in
- ?*) req=": $req" ;;
- esac
- echo
- echo $pkg $ver $req "$txt"
- case $cmp in
- ?*) echo "${sep}Components in this package:$nl"
- echo "$cmp" | pr -4 -o4 -t ;;
- esac
- ;;
- esac
- ;;
- esac
- fi
- done
- case $argc:$action in
- 0:list) if test -d tgz
- then cd tgz
- # f:file p:package v:version r:release t:type u:update
- for f in `find . -name '*?[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]*' -print | sed 's,^\./,,' | sort -r`
- do eval `echo "$f" | sed -e 's,\.c$,,' -e 's,\.gz$,,' -e 's,\.exe$,,' -e 's,\.tgz$,,' -e 's,\([^_.]*\)[_.]\([0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]\)[_.]\([0123456789][0123456789][0123456789][0123456789][^_.]*\)[_.]*\(.*\),p=\1 v=\2 r=\3 t=\4,' -e 's,\([^_.]*\)[_.]\([0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]\)[_.]*\(.*\),p=\1 v=\2 r=base t=\3,'`
- case $t in
- '') case $omit in
- *:$p.$v.$r:*) continue ;;
- esac
- u=$p.tim
- ;;
- *) u=$p.$t.tim
- ;;
- esac
- if test -s "$u"
- then s=local
- elif test -f "$u"
- then case `ls -t "$f" "$u" 2>/dev/null` in
- "$u"*) s=read ;;
- *) s=unread ;;
- esac
- else s=unread
- fi
- echo "$p$nl$v$nl$r$nl$t$nl$s$nl"
- done
- fi
- ;;
- esac
- } |
- case $action in
- list) pr -6 -a -o4 -t | sort -u ;;
- *) cat ;;
- esac
- case $argc in
- 0) if test -d $PACKAGEROOT/arch
- then echo
- echo architectures in $PACKAGEROOT
- echo
- for i in `ls $PACKAGEROOT/arch`
- do if test -f $PACKAGEROOT/arch/$i/lib/package/gen/host
- then h=`cat $PACKAGEROOT/arch/$i/lib/package/gen/host`
- else h=
- fi
- echo $i
- echo $h
- echo
- echo
- done | pr -4 -a -o4 -t
- fi
- ;;
- esac
- ;;
- copyright)
- # all work in $PACKAGESRC
- cd $PACKAGESRC
- # generate the package list
- set '' $target $package
- shift
- argc=$#
- case $# in
- 0) set '' `echo *.lic | sed 's,\.lic,,g'`
- shift
- case $1 in
- '*') echo $command: $action: no packages >&2
- exit 1
- ;;
- esac
- ;;
- esac
- checkaout proto || exit
- for i
- do copyright $i
- done
- ;;
- export) case $INSTALLROOT in
- $PACKAGEROOT)
- INSTALLROOT=$INSTALLROOT/arch/$HOSTTYPE
- ;;
- esac
- case $only in
- 0) v='$i=' ;;
- *) v= ;;
- esac
- set '' $target $package
- case $# in
- 1) set '' $env ;;
- esac
- while :
- do case $# in
- 1) break ;;
- esac
- shift
- i=$1
- eval echo ${v}'$'${i}
- done
- ;;
- install)cd $PACKAGEROOT
- set '' $package
- shift
- case $only in
- 0) set '' `order "$@"`
- shift
- ;;
- esac
- case $# in
- 0) echo "$command: at least one package name expected" >&2
- exit 1
- ;;
- esac
- package=$*
- requirements - $package
- set '' $target
- shift
- case $1 in
- flat) flat=1 # backwards compatibility -- documentation dropped
- shift
- ;;
- esac
- case $# in
- 0) echo "$command: $action: target directory argument expected" >&2
- exit 1
- ;;
- esac
- target=
- while :
- do case $# in
- 1) directory=$1
- break
- ;;
- esac
- target="$target $1"
- shift
- done
- if test ! -d $directory
- then echo "$command: $action: $directory: target directory not found" >&2
- exit 1
- fi
- case $target in
- '') cd arch
- set '' *
- shift
- target=$*
- cd ..
- ;;
- esac
- code=0
- makecheck=1
- for a in $target
- do case $a in
- -) a=$HOSTTYPE ;;
- esac
- case $flat:$a in
- 1:*|?:.)dest=$directory
- ;;
- *) dest=$directory/arch/$a
- if test "" = "$exec" -a ! -d $dest
- then mkdir -p $dest || {
- echo "$command: $dest: destination directory must exist" >&2
- exit 1
- }
- fi
- ;;
- esac
- for i in $package
- do if test "ratz" = "$i"
- then : skip
- elif test -f arch/$a/lib/package/gen/$i.sum
- then package_install $directory arch/$a/lib/package/gen/$i.sum || code=1
- elif test ! -d arch/$a/bin
- then echo "$command: $a: invalid architecture" >&2
- elif test ! -d $dest
- then echo "$command: $dest: destination directory must exist" >&2
- else if test "" != "$makecheck"
- then if onpath $MAKE
- then MAKE=$_onpath_
- else echo "$command: $MAKE: not found" >&2
- exit 1
- fi
- makecheck=
- fi
- if test "" != "$exec"
- then (
- trap - 0 1 2 15
- echo "=== $i installation manifest ==="
- cd arch/$a
- (
- cd lib/package
- INSTALLROOT=$PACKAGEROOT/arch/$a
- VPATH=$INSTALLROOT:$PACKAGEROOT:$VPATH
- export INSTALLROOT VPATH
- $MAKE -s $makeflags -f $i.pkg $qualifier list.installed $assign
- ) | sort -u
- )
- else (
- set -
- cd arch/$a
- (
- cd lib/package
- INSTALLROOT=$PACKAGEROOT/arch/$a
- VPATH=$INSTALLROOT:$PACKAGEROOT:$VPATH
- export INSTALLROOT VPATH
- echo lib/$command
- $MAKE -s $makeflags -f $i.pkg $qualifier list.installed $assign
- ) | sort -u | pax -drw -ps $dest
- )
- fi
- fi
- done
- done
- exit $code
- ;;
- license)# all work in $PACKAGESRC/LICENSES
- cd $PACKAGESRC/LICENSES || exit
- # generate the package list
- set '' $target $package
- shift
- argc=$#
- case $# in
- 0) set '' *
- shift
- case $1 in
- '*') echo $command: $action: no licenses >&2
- exit 1
- ;;
- esac
- ;;
- *) checkaout proto || exit
- a=
- for i
- do while :
- do if test -f ../$i.lic
- then j=`proto -df -l ../$i.lic -o query=type /dev/null 2>/dev/null`
- case $j in
- ?*) if test -f $j
- then case " $a " in
- *" $j "*) ;;
- *) a="$a $j" ;;
- esac
- fi
- break
- ;;
- esac
- fi
- case $i in
- *-*) i=`echo $i | sed 's/-[^-]*$//'`
- ;;
- *) echo "$command: $i: package license not found" >&2
- break
- ;;
- esac
- done
- done
- set '' $a
- shift
- ;;
- esac
- for i
- do case $exec in
- '') echo
- echo " --- $i source license ---"
- echo
- cat $i
- ;;
- *) echo $PACKAGESRC/LICENSES/$i
- ;;
- esac
- done
- ;;
- make|view)
- cd $PACKAGEROOT
- case $package in
- '') lic="lib/package/*.lic"
- ;;
- *) for i in $package
- do lic="$lic lib/package/$i.lic"
- case $i in
- *-*) lic="$lic lib/package/"`echo $i | sed 's,-.*,,'`".lic" ;;
- esac
- done
- ;;
- esac
- checksrc
- requirements source $package
- components $package
- package=$_components_
- # check for some required commands
- must="$AR"
- warn="$NM yacc bison"
- test="$must $warn"
- have=
- IFS=:
- set /$IFS$PATH
- IFS=$ifs
- shift
- for t in $test
- do if executable $t
- then have="$have $t"
- fi
- done
- for d
- do for t in $test
- do case " $have " in
- *" $t "*)
- ;;
- *) if executable $d/$t
- then have="$have $t"
- fi
- ;;
- esac
- done
- done
- case " $have " in
- *" bison "*) ;;
- *" yacc "*) have="$have bison" ;;
- esac
- case " $have " in
- *" yacc "*) ;;
- *" bison "*) have="$have yacc" ;;
- esac
- for t in $test
- do case " $have " in
- *" $t "*)
- ;;
- *) case " $must " in
- *" $t "*)
- echo "$command: $t: not found -- must be on PATH to $action" >&2
- exit 1
- ;;
- *) echo "$command: warning: $t: not found -- some $action actions may fail" >&2
- ;;
- esac
- ;;
- esac
- done
- # verify the top view
- if test ! -d $PACKAGEROOT/src
- then note no source packages to make
- exit 0
- elif test ! -d $INSTALLROOT/src
- then note initialize the $INSTALLROOT view
- fi
- for i in arch arch/$HOSTTYPE
- do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
- done
- for i in bin bin/$OK bin/$OK/lib fun include lib lib/package lib/package/gen src man man/man1 man/man3 man/man8
- do test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
- done
- make_recurse src
- o= k=
- for i in $makefiles
- do case $o in
- ?*) o="$o -o" k="$k|" ;;
- esac
- o="$o -name $i"
- k="$k$i"
- done
- o="( $o ) -print"
- for d in $package_src
- do i=src/$d
- if test -d $i
- then test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
- make_recurse $i
- for j in `cd $i; find . $o 2>/dev/null | sed -e 's,^\./,,' -e '/\//!d' -e 's,/[^/]*$,,' | sort -u`
- do case $j in
- $k|$MAKESKIP) continue ;;
- esac
- test -d $INSTALLROOT/$i/$j ||
- $exec mkdir -p $INSTALLROOT/$i/$j || exit
- done
- fi
- done
- def=
- for i in $lic
- do test -f $i || continue
- cmp -s $i $INSTALLROOT/$i 2>/dev/null ||
- $exec cp $PACKAGEROOT/$i $INSTALLROOT/$i
- for j in `grep '^. .*\.def$' $i`
- do case $j in
- .) ;;
- *) case " $def " in
- *" $i "*) ;;
- *) def="$def $i" ;;
- esac
- ;;
- esac
- done
- done
- for i in $def
- do i=lib/package/$i
- test -f $i || continue
- cmp -s $i $INSTALLROOT/$i 2>/dev/null ||
- $exec cp $PACKAGEROOT/$i $INSTALLROOT/$i
- done
- # check $CC and { ar cc ld ldd } intercepts
- h="${HOSTTYPE} ${HOSTTYPE}.*"
- case $HOSTTYPE in
- *.*) t=`echo $HOSTTYPE | sed 's/[.][^.]*//'`
- h="$h $t"
- ;;
- *) t=$HOSTTYPE
- ;;
- esac
- case $t in
- *[0123456789])
- t=`echo $t | sed 's/[0123456789]*$//'`
- h="$h $t"
- ;;
- esac
- case $CC in
- cc) c=cc
- b=$INSTALLROOT/bin/$c
- t=$INSTALLROOT/lib/package/gen/$c.tim
- intercept=0
- for k in $h
- do for s in $INITROOT/$c.$k
- do test -x "$s" || continue
- if cmp -s "$s" "$b" >/dev/null 2>&1
- then intercept=1
- break 2
- fi
- case `ls -t "$t" "$b" "$s" 2>/dev/null` in
- $t*) ;;
- $b*) cc=$b
- ;;
- $s*) cd $INSTALLROOT/lib/package/gen
- tmp=pkg$$
- eval '$'exec echo "'int main(){return 0;}' > $tmp.c"
- if $exec $s -o $tmp.exe $tmp.c >/dev/null 2>&1 &&
- test -x $tmp.exe
- then case $HOSTTYPE in
- *.mips*)$s -version >/dev/null 2>&1 || s= ;;
- esac
- case $s in
- ?*) $exec sed "s/^HOSTTYPE=.*/HOSTTYPE=$HOSTTYPE/" < "$s" > "$b" || exit
- $exec chmod +x "$b" || exit
- cc=$b
- intercept=1
- note update $b
- ;;
- esac
- fi
- $exec rm -f $tmp.*
- $exec touch "$t"
- cd $PACKAGEROOT
- ;;
- esac
- break 2
- done
- done
- case $intercept in
- 1) c=ld
- b=$INSTALLROOT/bin/$c
- for k in $h
- do for s in $INITROOT/$c.$k
- do test -x "$s" || continue
- case `ls -t "$b" "$s" 2>/dev/null` in
- $b*) ;;
- $s*) $exec cp "$s" "$b"
- note update $b
- ;;
- esac
- done
- done
- ;;
- esac
- ;;
- esac
- c=ldd
- b=$INSTALLROOT/bin/$c
- for t in $h
- do s=$INITROOT/$c.$t
- test -x "$s" || continue
- onpath $c ||
- case `ls -t "$b" "$s" 2>/dev/null` in
- $b*) ;;
- $s*) $exec cp "$s" "$b"
- note update $b
- ;;
- esac
- done
- c=ar
- b=$INSTALLROOT/bin/$c
- for t in $h
- do s=$INITROOT/$c.$t
- test -x "$s" || continue
- case `ls -t "$b" "$s" 2>/dev/null` in
- $b*) ;;
- $s*) $exec cp "$s" "$b"
- note update $b
- ;;
- esac
- done
- # following code stubbed out just in case ar.ibm.risc is needed
- # c=ar
- # b=$INSTALLROOT/bin/$c
- # for t in $h
- # do s=$INITROOT/$c.$t
- # test -x "$s" || continue
- # onpath $c ||
- # case `ls -t "$b" "$s" 2>/dev/null` in
- # $b*) ;;
- # $s*) x=`$s -tv /foo/bar.a 2>&1 | egrep -i 'option|usage'`
- # case $x in
- # '') $exec cp "$s" "$b"
- # note update $b
- # ;;
- # esac
- # ;;
- # esac
- # done
- case $cc in
- /*) ;;
- *) echo "$command: $CC: not found -- set CC=C-compiler" >&2
- exit 1
- ;;
- esac
- case $exec in
- '') cd $INSTALLROOT/lib/package/gen
- tmp=pkg$$
- echo 'int main(){return 0;}' > $tmp.c
- if $CC -o $tmp.exe $tmp.c > /dev/null 2> $tmp.err &&
- test -x $tmp.exe
- then : ok
- else echo "$command: $CC: failed to compile this program:" >&2
- cat $tmp.c >&2
- if test -s $tmp.err
- then cat $tmp.err >&2
- else echo "$command: $CC: not a C compiler" >&2
- fi
- rm -f $tmp.*
- exit 1
- fi
- rm -f $tmp.*
- cd $PACKAGEROOT
- ;;
- esac
- # remember the default $CC
- case $CC in
- cc) ;;
- *) if test -x $INSTALLROOT/bin/cc
- then case `sed 1q $INSTALLROOT/bin/cc` in
- ": $CC :")
- CC=cc
- export CC
- ;;
- *) assign="$assign CC=\"\$CC\""
- ;;
- esac
- else case $CROSS in
- 1) assign="$assign CC=\"\$CC\""
- ;;
- *) case $exec in
- '') {
- echo ": $CC :"
- echo "$CC \"\$@\""
- } > $INSTALLROOT/bin/cc
- chmod +x $INSTALLROOT/bin/cc
- ;;
- *) note generate a $INSTALLROOT/bin/cc wrapper for $CC
- ;;
- esac
- CC=cc
- export CC
- ;;
- esac
- fi
- ;;
- esac
- # no $INITROOT means INIT already installed elsewhere
- if test -d $INITROOT
- then
- # update probe scripts
- for i in lib/probe lib/probe/C lib/probe/C/make
- do test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
- done
- i=$INSTALLROOT/lib/probe/C/make/probe
- j=$INITROOT/C+probe
- k=$INITROOT/make.probe
- case `ls -t $i $j $k 2>/dev/null` in
- $i*) ;;
- *) if test -f $j -a -f $k
- then note update $i
- shellmagic
- case $exec in
- '') {
- case $SHELLMAGIC in
- ?*) echo "$SHELLMAGIC" ;;
- esac
- cat $j $k
- } > $i || exit
- ;;
- *) echo "{
- echo $SHELLMAGIC
- cat $j $k
- } > $i"
- ;;
- esac
- $exec chmod +x $i || exit
- fi
- ;;
- esac
- fi
- # initialize a few mamake related commands
- checkaout mamake proto ratz release || exit
- # execrate if necessary
- if (execrate) >/dev/null 2>&1
- then execrate=execrate
- $make cd $INSTALLROOT/bin
- for i in chmod chgrp cmp cp ln mv rm
- do if test ! -x $OK/$i -a -x /bin/$i.exe
- then shellmagic
- case $exec in
- '') echo "$SHELLMAGIC"'execrate /bin/'$i' "$@"' > $OK/$i
- chmod +x $OK/$i
- ;;
- *) $exec echo \'"$SHELLMAGIC"'execrate /bin/'$i' "$@"'\'' >' $OK/$i
- $exec chmod +x $OK/$i
- ;;
- esac
- fi
- done
- PATH=$INSTALLROOT/bin/$OK:$PATH
- export PATH
- else execrate=
- fi
- case $action in
- view) exit 0 ;;
- esac
- # all work under $INSTALLROOT/src
- $make cd $INSTALLROOT/src
- # record the build host name
- case $noexec in
- '') hostinfo name
- echo "$_hostinfo_" | sed 's,\..*,,' > $PACKAGEBIN/gen/host
- ;;
- esac
- # make in parallel if possible
- case $NPROC in
- '') hostinfo cpu
- case $_hostinfo_ in
- 0|1) ;;
- *) NPROC=$_hostinfo_
- $show NPROC=$NPROC
- $show export NPROC
- export NPROC
- ;;
- esac
- ;;
- esac
- # separate flags from target list
- case $target in
- *-*) a=
- for t in $target
- do case $t in
- -[eiknFKNV]*|--*-symbols)
- makeflags="$makeflags $t"
- ;;
- -*) nmakeflags="$nmakeflags $t"
- ;;
- *) a="$a $t"
- ;;
- esac
- done
- target=$a
- ;;
- esac
- # generate nmake first if possible
- if executable ! $NMAKE && test -d $PACKAGEROOT/src/cmd/nmake
- then if nonmake $MAKE
- then note make $NMAKE with mamake
- c=$CC
- a=$assign
- case $HOSTTYPE in
- win32*|cygwin*)
- CC="$CC -D_BLD_STATIC"
- accept="libast"
- case $assign in
- *' CC='*) ;;
- *) assign="$assign CC=\"\$CC\"" ;;
- esac
- ;;
- *) accept=nmake
- ;;
- esac
- eval capture mamake \$makeflags \$nmakeflags \$noexec install nmake $assign
- assign=$a
- CC=$c
- case $make$noexec in
- '') if executable ! $NMAKE
- then echo "$command: $action: errors making $NMAKE" >&2
- exit 1
- fi
- ;;
- *) make=echo
- ;;
- esac
- if test '' != "$PROTOROOT"
- then VPATH=$INSTALLROOT:$PACKAGEROOT$USER_VPATH
- $show VPATH=$VPATH
- export VPATH
- fi
- note believe generated files for $accept
- eval capture \$NMAKE \$makeflags \$nmakeflags \$noexec recurse believe \$nmakesep $accept $assign
- $exec touch $INSTALLROOT/bin/.paths
- note make the remaining targets with $NMAKE
- else eval capture $MAKE \$makeflags \$nmakeflags \$noexec install nmake $assign
- case $make$noexec in
- '') if executable ! $NMAKE
- then echo "$command: $action: errors making $NMAKE" >&2
- exit 1
- fi
- ;;
- *) make=echo
- ;;
- esac
- fi
- fi
- # generate ksh next if possible
- if nonmake $MAKE
- then : no need to generate ksh next -- it could be the only package
- elif test "$KEEP_SHELL" != 1 -a -d $PACKAGEROOT/src/cmd/ksh93 && executable ! $KSH
- then eval capture nmake $nmakeflags \$makeflags \$noexec install ksh93 $assign
- case $make$noexec in
- '') if executable ! $KSH
- then echo "$command: $action: errors making $KSH" >&2
- exit 1
- fi
- ;;
- *) make=echo
- ;;
- esac
- fi
- # mamprobe data should have been generated by this point
- case $exec in
- '') if test ! -f $INSTALLROOT/bin/.paths -o -w $INSTALLROOT/bin/.paths
- then N='
- '
- b= f= h= n= p= u= B= L=
- if test -f $INSTALLROOT/bin/.paths
- then exec < $INSTALLROOT/bin/.paths
- while read x
- do case $x in
- '#'?*) case $h in
- '') h=$x ;;
- esac
- ;;
- *BUILTIN_LIB=*) b=$x
- ;;
- *FPATH=*) f=$x
- ;;
- *PLUGIN_LIB=*) p=$x
- ;;
- *) case $u in
- ?*) u=$u$N ;;
- esac
- u=$u$x
- ;;
- esac
- done
- fi
- ifs=$IFS
- m=
- case $p in
- ?*) b=
- ;;
- esac
- case $b in
- ?*) IFS='='
- set $b
- IFS=$ifs
- shift
- p="PLUGIN_LIB=$*"
- case $b in
- [Nn][Oo]*) p=no$p ;;
- esac
- m=1
- ;;
- esac
- case $f in
- '') f="FPATH=../fun"
- m=1
- ;;
- esac
- case $h in
- '') h='# use { no NO } prefix to permanently disable #' ;;
- esac
- case $p in
- '') p="PLUGIN_LIB=cmd"
- if grep '^setv mam_cc_DIALECT .* EXPORT=[AD]LL' $INSTALLROOT/lib/probe/C/mam/* >/dev/null 2>&1
- then p=no$p
- fi
- m=1
- ;;
- esac
- case $m in
- 1) case $u in
- ?*) u=$N$u ;;
- esac
- echo "$h$N$p$N$f$N$u" > $INSTALLROOT/bin/.paths
- ;;
- esac
- fi
- ;;
- esac
- # run from separate copies since nmake and ksh may be rebuilt
- case $EXECROOT in
- $INSTALLROOT)
- $make cd $INSTALLROOT/bin
- if executable /bin/cp
- then cp=/bin/cp
- else cp=cp
- fi
- if executable /bin/mv
- then mv=/bin/mv
- else mv=mv
- fi
- if executable /bin/rm
- then rm=/bin/rm
- else rm=rm
- fi
- for i in \
- ksh nmake tee cp ln mv rm \
- *ast*.dll *cmd*.dll *dll*.dll *shell*.dll
- do executable $i && {
- cmp -s $i $OK/$i 2>/dev/null || {
- test -f $OK/$i &&
- $exec $execrate $rm $OK/$i </dev/null
- test -f $OK/$i &&
- $exec $execrate $mv $OK/$i $OK/$i.old </dev/null
- test -f $OK/$i &&
- case $exec:$i in
- :nmake|:ksh)
- echo "$command: $OK/$i: cannot update [may be in use by a running process] remove manually and try again" >&2
- exit 1
- ;;
- esac
- $exec $execrate $cp $i $OK/$i
- }
- }
- done
- if test -f ../lib/make/makerules.mo
- then cmp -s ../lib/make/makerules.mo $OK/lib/makerules.mo ||
- $exec $execrate $cp -p ../lib/make/makerules.mo $OK/lib/makerules.mo ||
- $exec $execrate $cp ../lib/make/makerules.mo $OK/lib/makerules.mo
- fi
- if executable $OK/nmake
- then MAKE="$INSTALLROOT/bin/$OK/nmake LOCALRULESPATH=$INSTALLROOT/bin/$OK/lib"
- fi
- if executable $OK/tee
- then TEE=$INSTALLROOT/bin/$OK/tee
- fi
- if test "$KEEP_SHELL" != 1 && executable $OK/ksh
- then SHELL=$INSTALLROOT/bin/$OK/ksh
- export SHELL
- fi
- case :$PATH: in
- *:$INSTALLROOT/bin/$OK:*)
- ;;
- *) PATH=$INSTALLROOT/bin/$OK:$PATH
- export PATH
- ;;
- esac
- $make cd $INSTALLROOT/src
- ;;
- esac
- # fall back to mamake if nmake not found or too old
- if nonmake $MAKE
- then note make with mamake
- case $target in
- '') target="install" ;;
- esac
- eval capture mamake \$makeflags \$noexec \$target $assign
- else case $target in
- '') target="install cc-" ;;
- esac
- eval capture \$MAKE \$makeflags \$nmakeflags \$noexec recurse \$target \$nmakesep \$package $assign
- fi
- ;;
- read) case ${PWD:-`pwd`} in
- $PACKAGEROOT)
- ;;
- *) echo "$command: must be in package root directory" >&2
- exit 1
- ;;
- esac
- PAX=
- if onpath pax
- then case `$_onpath_ -rw --?meter 2>&1` in
- *--meter*) PAX=pax ;;
- esac
- fi
- code=0
- i=
- x=
- remove=
- touch=
- set '' $target
- case $2 in
- lcl|tgz)tgz=$2
- shift 2
- target=$*
- ;;
- *) tgz=tgz
- ;;
- esac
- set '' $package $target
- case $# in
- 1) verbose=:
- set '' `ls lib/package/$tgz/*?[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]* 2>/dev/null`
- ;;
- *) verbose=
- ;;
- esac
- shift
- files=
- for f
- do if test -f "$f"
- then : ok
- elif test -f "lib/package/$tgz/$f"
- then f=lib/package/$tgz/$f
- else set '' `ls -r ${f}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]* 2>/dev/null`
- if test '' != "$2" -a -f "$2"
- then f=$2
- else set '' `ls -r lib/package/$tgz/${f}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]* 2>/dev/null`
- if test '' != "$2" -a -f "$2"
- then f=$2
- else echo "$command: $f: package archive not found" >&2
- continue
- fi
- fi
- fi
- files="$files $f"
- done
- case $files in
- '') echo "$command: lib/package/$tgz: no package archives" >&2
- exit 1
- ;;
- esac
- set '' `ls -r $files 2>/dev/null`
- shift
- f1= f2= f3= f4=
- for f
- do case $f in
- ratz.*|*/ratz.*)
- f1="$f1 $f"
- ;;
- INIT.*|*/INIT.*)
- f2="$f2 $f"
- ;;
- INIT*|*/INIT*)
- f3="$f3 $f"
- ;;
- *) f4="$f4 $f"
- ;;
- esac
- done
- gen=
- set '' $f1 $f2 $f3 $f4
- while :
- do shift
- case $# in
- 0) break ;;
- esac
- f=$1
- case $f in
- *.gz) : standalone packages unbundled manually
- continue
- ;;
- *.md5) : tarball checksum
- continue
- ;;
- *?[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]*)
- ;;
- *) echo "$command: $f: not a package archive" >&2
- code=1
- continue
- ;;
- esac
- case $f in
- */*) eval `echo "$f" | sed -e 's,\(.*/\)\(.*\),d=\1 a=\2,'` ;;
- *) d= a=$f ;;
- esac
- # f:file d:dir a:base p:package v:version r:release t:type
- eval `echo "$a" | sed -e 's,\.c$,,' -e 's,\.gz$,,' -e 's,\.exe$,,' -e 's,\.tgz$,,' -e 's,\([^_.]*\)[_.]\([0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]\)[_.]\([0123456789][0123456789][0123456789][0123456789][^_.]*\)[_.]*\(.*\),p=\1 v=\2 r=\3 t=\4,' -e 's,\([^_.]*\)[_.]\([0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]\)[_.]*\(.*\),p=\1 v=\2 r=base t=\3,'`
- case $r in
- base) y=$p.base ;;
- *) y=$p.delta ;;
- esac
- case " $x " in
- *" $y "*)
- continue
- ;;
- esac
- case $t in
- '') w=$PACKAGESRC
- q=
- Q=
- m=
- ;;
- *) w=$PACKAGEROOT/arch/$t/lib/package
- q=".$t"
- Q="_$t"
- m="[_.]$t"
- ;;
- esac
- u=$d$p$q.tim
- if test -s "$u"
- then continue
- else case $force in
- 0) case `ls -t "$f" "$u" 2>/dev/null` in
- "$u"*) case $verbose in
- 1) note $p already read ;;
- esac
- continue
- ;;
- esac
- ;;
- esac
- fi
- case $p in
- INIT) if test -f $PACKAGEROOT/bin/package
- then $exec mv $PACKAGEROOT/bin/package $PACKAGEROOT/bin/package.old
- fi
- ;;
- esac
- z=
- case $r in
- base) # base archive
- if test ratz = "$p"
- then # ratz packages are not archives
- case $t in
- '') for i in src src/cmd src/cmd/INIT
- do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
- done
- $exec cp $f $PACKAGEROOT/src/cmd/INIT/$p.c
- ;;
- *) for i in arch arch/$t arch/$t/bin
- do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
- done
- $exec cp $f $PACKAGEROOT/arch/$t/bin/$p &&
- $exec chmod +x $PACKAGEROOT/arch/$t/bin/$p
- ;;
- esac
- elif test "" != "$PAX"
- then $exec pax -L --from=ascii --local -m -ps -rvf "$f" || {
- code=1
- continue
- }
- else if onpath gunzip && onpath $TAR && isascii
- then case $TARPROBE in
- ?*) for i in $TARPROBE
- do if $TAR ${i}f - /dev/null > /dev/null 2>&1
- then TARFLAGS=$TARFLAGS$i
- fi
- done
- TARPROBE=
- ;;
- esac
- if gunzip -l < "$f" > /dev/null 2>&1
- then case $exec in
- '') $exec gunzip < "$f" | $TAR ${TARFLAGS}f - ;;
- *) $exec "gunzip < $f | $TAR ${TARFLAGS}f -" ;;
- esac || {
- code=1
- continue
- }
- else $exec $TAR ${TARFLAGS}f "$f" || {
- code=1
- continue
- }
- fi
- else checkaout ratz && onpath ratz || {
- code=1
- continue
- }
- RATZ=$_onpath_
- case $exec in
- '') echo $f:
- $exec $RATZ -lm < "$f"
- ;;
- *) $exec "$RATZ -lm < $f"
- ;;
- esac || {
- code=1
- continue
- }
- fi
- if test -f $PACKAGEBIN/gen/$p.sum
- then while read md5 mode usr grp file
- do case $file in
- -*) file=./$file ;;
- esac
- case $mode in
- [01234567][01234567][01234567][01234567])
- case $grp in
- -) ;;
- *) $exec chgrp $grp "$file" ;;
- esac
- case $usr in
- -) ;;
- *) $exec chown $usr "$file" ;;
- esac
- $exec chmod $mode "$file"
- ;;
- esac
- done < $PACKAGEBIN/gen/$p.sum
- fi
- fi
- ;;
- *) # delta archive
- test "" != "$PAX" || {
- echo "$command: $f: pax required to read delta archive" >&2
- code=1
- continue
- }
- case `echo "$v:
- $r:" | sort` in
- $r:*) y=$p.base
- b=${d}${p}_${r}${Q}.tgz
- test -f "$b" || b=${d}${p}.${r}${q}.tgz
- test -f "$b" || {
- case " $gen " in
- *" $b "*)
- ;;
- *) case $# in
- 1) echo "$command: $f: base archive $b required to read delta" >&2
- code=1
- ;;
- *) shift
- y=$1
- shift
- set '' $y $f "$@"
- esac
- continue
- ;;
- esac
- }
- # -m with delta bug fixed 2005-02-08
- $exec pax -L --from=ascii --local -ps -rvf "$f" -z "$b" || {
- code=1
- continue
- }
- note $f: generate new base $d$p.$v$q.tgz
- $exec pax -rf "$f" -z "$b" -wf $d$p.$v$q.tgz -x tgz || {
- code=1
- continue
- }
- case $exec in
- '') echo $p $v $v 1 > $w/gen/$p.ver
- ;;
- *) z=$d${p}[_.]$v$q.tgz
- $exec "echo $p $v $v 1 > $w/gen/$p.ver"
- gen="$gen $d$p.$v$q.tgz"
- ;;
- esac
- case " $remove " in
- *" $f "*) ;;
- *) remove="$remove $f" ;;
- esac
- ;;
- *) b=${d}${p}_${v}${Q}.tgz
- test -f "$b" || b=${d}${p}.${v}${q}.tgz
- test -f "$b" || {
- case " $gen " in
- *" $b "*)
- ;;
- *) case $# in
- 1) echo "$command: $f: base archive $b required to read delta" >&2
- code=1
- ;;
- *) shift
- y=$1
- shift
- set '' $y $f "$@"
- esac
- continue
- ;;
- esac
- }
- # -m with delta bug fixed 2005-02-08
- $exec pax -L --from=ascii --local -ps -rvf "$f" -z "$b" || {
- code=1
- continue
- }
- ;;
- esac
- ;;
- *) echo "$command: $f: unknown archive type" >&2
- code=1
- continue
- ;;
- esac
- # check for ini files
- if executable $w/$p.ini
- then $exec $w/$p.ini read || {
- code=1
- continue
- }
- fi
- # add to the obsolete list
- k=
- for i in `ls $d$p[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]????$m* $z 2>/dev/null`
- do case $i in
- *.md5) continue
- ;;
- $d${p}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]$m*)
- ;;
- $d${p}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]$m*)
- continue
- ;;
- esac
- case $k in
- ?*) case " $remove " in
- *" $k "*) ;;
- *) remove="$remove $k" ;;
- esac
- ;;
- esac
- k=$i
- done
- x="$x $y"
- case " $touch " in
- *" $u "*) ;;
- *) touch="$touch $u" ;;
- esac
- done
- if test ! -f $PACKAGEROOT/bin/package -a -f $PACKAGEROOT/bin/package.old
- then $exec cp $PACKAGEROOT/bin/package.old $PACKAGEROOT/bin/package
- fi
- # drop obsolete archives
- case $remove in
- ?*) $exec rm -f $remove ;;
- esac
- # mark the updated archives
- case $touch in
- ?*) sleep 1; $exec touch $touch ;;
- esac
- # check the requirements
- case $code$exec in
- 0) requirements - $x ;;
- esac
- exit $code
- ;;
- regress)if test ! -d $PACKAGEBIN/gen
- then echo "$command: 'package make' and 'package test' required for regression" >&2
- exit 1
- fi
- dir=$PACKAGEBIN/gen
- cd $dir
- for s in out old
- do case `ls -t regress.$s test.$s 2>/dev/null` in
- regress*)
- ;;
- test*) if test -f regress.$s
- then $exec mv regress.$s regress.old
- fi
- case $exec in
- '') egrep -i '\*\*\*|FAIL|^TEST.* [123456789][0123456789]* error|core.*dump' test.$s |
- sed -e '/\*\*\* [0123456789]/d' \
- -e '/^TEST.\//s,/[^ ]*/,,' \
- -e 's,[ ][ ]*$,,' \
- -e 's/[0123456789][0123456789]*:* \([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 ]*([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 ]*[Cc][Oo][Rr][Ee][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 ]*)\)/\1/' \
- -e 's/\.sh failed at .* with /.sh failed /' \
- > regress.$s
- ;;
- *) $exec filter test failures from $dir/test.$s to $dir/regress.$s
- ;;
- esac
- ;;
- esac
- done
- if test -f regress.out -a -f regress.old
- then $exec diff -b regress.out regress.old
- else echo "$command: at least 2 test runs required for regression" >&2
- exit 1
- fi
- ;;
- release)count= lo= hi=
- checksrc
- checkaout release || exit
- requirements source $package
- components $package
- package=$_components_
- set '' $target
- shift
- case $# in
- 0) ;;
- *) case $1 in
- -|[0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789])
- case $1 in
- -) lo= release= ;;
- *) lo=$1 release="-f $1" ;;
- esac
- shift
- case $1 in
- -|[0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789])
- case $1 in
- -) hi= ;;
- *) hi=$1 release="$release -t $1" ;;
- esac
- shift
- ;;
- esac
- ;;
- [0123456789]|[0123456789][0123456789]|[0123456789][0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789][0123456789]*)
- count=$1
- release="-r $count"
- shift
- ;;
- esac
- ;;
- esac
- case $# in
- 0) case $package in
- '') package=* ;;
- esac
- ;;
- *) case $package in
- '') package=$*
- ;;
- *) echo $command: $*: lo-date hi-date arguments expected >&2
- exit 1
- ;;
- esac
- ;;
- esac
- echo
- case $count:$lo:$hi in
- ::) echo "All recorded changes follow." ;;
- 1::) echo "Changes since the last release follow." ;;
- ?*::) echo "Changes since the last $count releases follow." ;;
- 1:?*:) echo "Changes since $lo or the last release follow." ;;
- *:?*:*) echo "Changes since $lo follow." ;;
- *::?*) echo "Changes before $hi follow." ;;
- *) echo "Changes between $lo and $hi follow." ;;
- esac
- x=
- for r in $INSTALLROOT $PACKAGEROOT
- do for s in $package_src
- do d=$r/src/$s
- if test -d $d
- then cd $d
- for i in $package
- do if test -h $i 2>/dev/null
- then continue
- fi
- case " $x " in
- *" $i "*) continue ;;
- esac
- for f in RELEASE CHANGES ChangeLog
- do if test -f $i/$f
- then $exec release $release $i/$f
- x="$x $i"
- for f in $i/*/$f
- do if test -f $f
- then $exec release $release $f
- fi
- done
- break
- fi
- done
- done
- fi
- done
- done
- ;;
- remove) echo "$command: $action: not implemented yet" >&2
- exit 1
- ;;
- results)set '' $target
- shift
- def=make
- dir=$PACKAGEBIN/gen
- case $verbose in
- 0) filter=yes ;;
- *) filter=cat ;;
- esac
- path=0
- suf=out
- on=
- while :
- do case $# in
- 0) break ;;
- esac
- case $1 in
- --) shift
- break
- ;;
- admin) dir=$PACKAGESRC/admin
- ;;
- error*|fail*)
- filter=errors
- ;;
- make|test|view|write)
- def=$1
- case $filter:$1:$SHELL in
- errors:*:*) ;;
- *:test:*/ksh*) filter=rt ;;
- esac
- ;;
- old) suf=old
- ;;
- on) case $# in
- 1) echo $command: $action: $1: host pattern argument expected >&2
- exit 1
- ;;
- esac
- shift
- case $on in
- ?*) on="$on|" ;;
- esac
- on="$on$1"
- ;;
- path) path=1
- ;;
- test) def=test
- filter=rt
- ;;
- *) break
- ;;
- esac
- shift
- done
- case $dir in
- */admin)case $on in
- '') on="*" ;;
- *) on="@($on)" ;;
- esac
- def=$def.log/$on
- ;;
- esac
- case $# in
- 0) set "$def" ;;
- esac
- m=
- t=
- for i
- do k=0
- eval set '""' $i - $i.$suf - $dir/$i - $dir/$i.$suf -
- shift
- for j
- do case $j in
- -) case $k in
- 1) continue 2 ;;
- esac
- ;;
- *) if test -f $j
- then k=1
- case /$j in
- */test.*) t="$t $j" ;;
- *) m="$m $j" ;;
- esac
- fi
- ;;
- esac
- done
- echo "$command: $i action output not found" >&2
- exit 1
- done
- sep=
- case $t in
- ?*) case $path in
- 0) for j in $t
- do echo "$sep==> $j <=="
- sep=$nl
- case $filter in
- cat) $exec cat $j
- ;;
- errors) $exec egrep -i '\*\*\*|FAIL[ES]|^TEST.* [123456789][0123456789]* error|core.*dump' $j | sed -e '/^TEST.\//s,/[^ ]*/,,'
- ;;
- rt) $exec $KSH rt - $j
- ;;
- *) $exec egrep -i '^TEST|FAIL' $j
- ;;
- esac
- done
- ;;
- 1) echo $t
- ;;
- esac
- ;;
- esac
- case $m in
- ?*) case $path in
- 0) case $filter in
- cat) cat $m
- ;;
- *) if test -f $HOME/.pkgresults
- then i="`cat $HOME/.pkgresults`"
- case $i in
- '|'*) ;;
- *) i="|$i" ;;
- esac
- else i=
- fi
- for j in $m
- do echo "$sep==> $j <=="
- sep=$nl
- case $filter in
- errors) $exeg egrep '^pax:|\*\*\*' $j
- ;;
- *) $exec egrep -iv '^($||[\+\[]|cc[^-:]|kill |make.*(file system time|has been replaced)|so|[0123456789]+ error|uncrate |[0123456789]+ block|ar: creat|iffe: test: |conf: (check|generate|test)|[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*=|gsf@research|ar:.*warning|cpio:|ld:.*(duplicate symbol|to obtain more information)|[0123456789]*$|(checking|creating|touch) [/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789])| obsolete predefined symbol | is (almost always misused|dangerous|deprecated|not implemented)| trigraph| assigned to | cast .* different size| integer overflow .*<<| optimization may be attained | passed as |::__builtin|pragma.*prototyped|^creating.*\.a$|warning.*not optimized|exceeds size thresh|ld:.*preempts|is unchanged|with value >=|(-l|lib)\*|/(ast|sys)/(dir|limits|param|stropts)\.h.*redefined|usage|base registers|`\.\.\.` obsolete'"$i" $j |
- $exec grep :
- ;;
- esac
- done
- ;;
- esac
- ;;
- 1) echo $m
- ;;
- esac
- esac
- ;;
- test) requirements source $package
- components $package
- package=$_components_
- case $only in
- 0) only= ;;
- 1) only=--recurse=only ;;
- esac
- # must have nmake
- if nonmake $MAKE
- then echo $command: $action: must have $MAKE to test >&2
- exit 1
- fi
- # all work under $INSTALLROOT/src
- $make cd $INSTALLROOT/src
- # disable core dumps (could be disastrous over nfs)
- (ulimit -c 0) > /dev/null 2>&1 && ulimit -c 0
- # do the tests
- eval capture \$MAKE \$makeflags \$noexec \$only recurse test \$target \$nmakesep \$package $assign
- ;;
- update) # download the latest release.version for selected packages
- # all work in $PACKAGEROOT/lib/package/tgz
- if test ! -d $PACKAGEROOT/lib/package/tgz
- then $exec mkdir -p $PACKAGEROOT/lib/package/tgz || exit
- $exec cd $PACKAGEROOT/lib/package/tgz
- else cd $PACKAGEROOT/lib/package/tgz
- fi
- # get the architectures, update query url, and packages
- set '' $args
- op=update
- tgz=tgz
- source=
- binary=
- setup=
- types=
- url=
- urlfile=$default_url
- while :
- do shift
- case $# in
- 0) break ;;
- esac
- case $1 in
- --) shift
- break
- ;;
- beta) op=beta
- tgz=beta
- ;;
- binary) binary=1
- ;;
- setup) setup=1
- ;;
- source) source=1
- ;;
- *://*) url=$1
- shift
- break
- ;;
- *.url) urlfile=$1
- if test ! -s $urlfile
- then echo $command: $urlfile: not found >&2; exit 1
- fi
- break
- ;;
- $all_types)
- binary=1
- types="$types $1"
- ;;
- *) break
- ;;
- esac
- done
- case $source:$binary in
- :) source=1 binary=1
- ;;
- :1) case $types in
- '') types=$HOSTTYPE ;;
- esac
- ;;
- esac
- case $url in
- '') case $urlfile in
- $default_url)
- if test ! -s $urlfile
- then echo $command: url argument expected >&2; exit 1
- fi
- ;;
- *) default_url=
- ;;
- esac
- url=
- if grep '^url=' $urlfile >/dev/null
- then a=$authorize
- p=$password
- case $urlfile in
- */*) ;;
- *) urlfile=./$urlfile ;;
- esac
- . $urlfile
- case $a:$p in
- $authorize:$password)
- default_url=
- ;;
- *) case $a in
- ?*) authorize=$a ;;
- esac
- case $p in
- ?*) password=$p ;;
- esac
- ;;
- esac
- else url=`cat $urlfile`
- fi
- ;;
- esac
- case $exec in
- ?*) default_url= ;;
- esac
- # get the update list
- eval `echo $url | sed 's,\(.*\)://\([^/]*\)/\(.*\),prot=\"\1\" host=\"\2\" dir=\"\3\",'`
- get $host $dir/$op.html
- # get/check the package names
- case " $* " in
- *" - "*)case $source in
- 1) source_packages=$* ;;
- *) source_packages= ;;
- esac
- case $binary in
- 1) binary_packages=$* ;;
- *) binary_packages= ;;
- esac
- package_hit=$*
- ;;
- " ") nl="
- "
- case $source in
- 1) p=
- for f in `ls *.????-??-??.* 2>/dev/null`
- do case $f in
- *.????-??-??.????-??-??.*.*)
- ;;
- *.????-??-??.????-??-??.*)
- p=$p$nl$f
- ;;
- *.????-??-??.*.*)
- ;;
- *.????-??-??.*)
- p=$p$nl$f
- ;;
- esac
- done
- set '' `echo "$p" | sed 's,\..*,,' | sort -u`
- shift
- source_packages=$*
- ;;
- *) source_packages=
- ;;
- esac
- case $binary in
- 1) p=
- for f in `ls *.????-??-??.* 2>/dev/null`
- do case $f in
- *.????-??-??.????-??-??.*.*)
- p=$p$nl$f
- ;;
- *.????-??-??.????-??-??.*)
- ;;
- *.????-??-??.*.*)
- p=$p$nl$f
- ;;
- *.????-??-??.*)
- ;;
- esac
- done
- set '' `echo "$p" | sed 's,\..*,,' | sort -u`
- shift
- binary_packages=$*
- ;;
- *) binary_packages=
- ;;
- esac
- package_hit="$source_packages $binary_packages"
- ;;
- *) case $source in
- 1) source_packages=$* ;;
- *) source_packages= ;;
- esac
- case $binary in
- 1) binary_packages=$* ;;
- *) binary_packages= ;;
- esac
- package_hit=
- ;;
- esac
- # get the latest updates
- types_test=
- types_local=
- dir=$dir/$tgz
- case $default_url in
- ?*) echo "url='$url' authorize='$authorize' password='$password'" > $default_url
- case $authorize in
- ?*) chmod go-rwx $default_url ;;
- esac
- ;;
- esac
- echo "$got" > got.tmp
- case $only in
- 0) exec < got.tmp
- covered=
- while read name suffix type base base_size delta delta_size sync sync_size requires covers base_sum delta_sum sync_sum comment
- do case $requires in
- ''|-*) continue ;;
- esac
- IFS=:
- set '' $requires
- IFS=$ifs
- case $type in
- -) case " $source_packages " in
- *" $name "*|*" - "*)
- for name
- do case " $source_packages " in
- *" $name "*)
- ;;
- *) source_packages="$source_packages $name"
- covered=$covered:$covers
- ;;
- esac
- done
- ;;
- esac
- ;;
- *) case " $binary_packages " in
- *" $name "*|*" - "*)
- for name
- do case " $binary_packages " in
- *" $name "*)
- ;;
- *) binary_packages="$binary_packages $name"
- covered=$covered:$covers
- ;;
- esac
- done
- ;;
- esac
- ;;
- esac
- done
- case $covered in
- ?*) x=$source_packages
- source_packages=
- for name in $x
- do case :$covered: in
- *:$name:*) ;;
- *) source_packages="$source_packages $name" ;;
- esac
- done
- x=$binary_packages
- binary_packages=
- for name in $x
- do case :$covered: in
- *:$name:*) ;;
- *) binary_packages="$binary_packages $name" ;;
- esac
- done
- ;;
- esac
- ;;
- esac
- checksum=
- for i in $checksum_commands
- do case `( $i ) < /dev/null 2> /dev/null` in
- ${checksum_empty}|${checksum_empty}[\ \ ]*)
- checksum=$i
- break
- ;;
- esac
- done
- case $checksum in
- '') echo $command: warning: '{' $checksum_commands '}' command not found -- only download sizes will be checked >&2 ;;
- esac
- exec < got.tmp
- while read name suffix type base base_size delta delta_size sync sync_size requires covers base_sum delta_sum sync_sum comment
- do case $verbose in
- 1) case $type in
- -) i= ;;
- *) i=.$type ;;
- esac
- j="$name.$base$i.$suffix"
- case $delta in
- -) j="$j -" ;;
- *) j="$j $name.$base.$delta$i.$suffix" ;;
- esac
- case $sync in
- -) j="$j -" ;;
- *) j="$j $name.$base.$sync$i.$suffix" ;;
- esac
- echo $command: $j $base_size:$base_sum $delta_size:$delta_sum $sync_size:$sync_sum $requires >&2
- esac
- case " $package_hit " in
- *" $name "*|*" - "*)
- ;;
- *) package_hit="$package_hit $name"
- ;;
- esac
- case $type in
- -) case " $source_packages " in
- *" $name "*|*" - "*)
- if test -s $name.tim
- then continue
- fi
- lcl=$name.$base.$suffix
- if test -f $lcl
- then case $checksum:$base_sum in
- :*|*:-) size=`wc -c < $lcl | sed 's, ,,g'` sum=$base_sum ;;
- *) size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'` ;;
- esac
- else size=X sum=X
- fi
- if test "0" != "$force" -a "X-" = "X$delta" -o "$base_size" != "$size" -o "$base_sum" != "$sum"
- then rmt=
- case $sync:$sync_size in
- -*|*[-:])
- ;;
- *) lcl=$name.$base.$sync.$suffix
- if test -f $lcl
- then rmt=1
- get $host $dir $lcl $sync_size $sync_sum
- fi
- ;;
- esac
- case $base:$base_size in
- -*|*[-:])
- ;;
- *) case $rmt in
- '') lcl=$name.$base.$suffix
- get $host $dir $lcl $base_size $base_sum
- ;;
- esac
- ;;
- esac
- fi
- case $delta:$delta_size in
- -*|*[-:])
- ;;
- *) lcl=$name.$delta.$base.$suffix
- if test -f $lcl
- then case $checksum:$delta_sum in
- :*|*:-) size=`wc -c < $lcl | sed 's, ,,g'` sum=$delta_sum ;;
- *) size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'` ;;
- esac
- else size=X sum=X
- fi
- if test "0" != "$force" -o "$delta_size" != "$size" -o "$delta_sum" != "$sum"
- then get $host $dir $lcl $delta_size $delta_sum
- fi
- ;;
- esac
- ;;
- esac
- ;;
- *) case " $binary_packages " in
- *" $name "*|*" - "*)
- if test -s $name.$type.tim
- then continue
- fi
- case " $types " in
- *" - "*);;
- " ") case " $types_test " in
- *" $type "*)
- ;;
- *) types_test="$types_test $type"
- for i in *.????-??-??.$type.* *.????-??-??.????-??-??.$type.*
- do if test -f $i
- then types_local="$types_local $type"
- fi
- break
- done
- ;;
- esac
- case " $types_local " in
- *" $type "*)
- ;;
- *) continue
- ;;
- esac
- ;;
- *) case " $types " in
- *" $type "*)
- ;;
- *) continue
- ;;
- esac
- ;;
- esac
- lcl=$name.$base.$type.$suffix
- if test -f $lcl
- then case $checksum:$base_sum in
- :*|*:-) size=`wc -c < $lcl | sed 's, ,,g'` sum=$base_sum ;;
- *) size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'` ;;
- esac
- else size=X sum=X
- fi
- if test "0" != "$force" -a "X-" = "X$delta" -o "$base_size" != "$size" -o "$base_sum" != "$sum"
- then rmt=
- case $sync:$sync_size in
- -*|*[-:])
- ;;
- *) lcl=$name.$base.$sync.$type.$suffix
- if test -f $lcl
- then rmt=1
- get $host $dir $lcl $sync_size $sync_sum
- fi
- ;;
- esac
- case $base:$base_size in
- -*|*[-:])
- ;;
- *) case $rmt in
- '') lcl=$name.$base.$type.$suffix
- get $host $dir $lcl $base_size $base_sum
- ;;
- esac
- ;;
- esac
- fi
- case $delta:$delta_size in
- -*|*[-:])
- ;;
- *) lcl=$name.$delta.$base.$type.$suffix
- if test -f $lcl
- then sum=`$checksum < $lcl | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'`
- else sum=X
- fi
- if test -f $lcl
- then case $checksum:$delta_sum in
- :*|*:-) size=`wc -c < $lcl | sed 's, ,,g'` sum=$delta_sum ;;
- *) size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'` ;;
- esac
- else size=X sum=X
- fi
- if test "0" != "$force" -o "$delta_size" != "$size" -o "$delta_sum" != "$sum"
- then get $host $dir $lcl $delta_size $delta_sum
- fi
- ;;
- esac
- ;;
- esac
- ;;
- esac
- done
- closure=
- for name in $source_packages $binary_packages
- do case $name in
- -) ;;
- *) case " $package_hit " in
- *" $name "*)
- case $setup in
- 1) case " $closure " in
- *" $name "*)
- ;;
- *) closure="$closure $name"
- ;;
- esac
- ;;
- esac
- ;;
- *) echo $command: $name: unknown package >&2
- ;;
- esac
- ;;
- esac
- done
- exec <&-
- rm -f got.tmp
- case $closure in
- ?*) echo $closure ;;
- esac
- ;;
- use) # finalize the environment
- x=:..
- for d in `( cd $PACKAGEROOT; ls src/*/Mamfile 2>/dev/null | sed 's,/[^/]*$,,' | sort -u )`
- do x=$x:$INSTALLROOT/$d
- done
- x=$x:$INSTALLROOT
- case $CDPATH: in
- $x:*) ;;
- *) CDPATH=$x:$CDPATH
- $show CDPATH=$CDPATH
- $show export CDPATH
- export CDPATH
- ;;
- esac
- P=$PACKAGEROOT
- $show P=$P
- $show export P
- export P
- A=$INSTALLROOT
- $show A=$A
- $show export A
- export A
- case $NPROC in
- '') hostinfo cpu
- case $_hostinfo_ in
- 0|1) ;;
- *) NPROC=$_hostinfo_
- $show NPROC=$NPROC
- $show export NPROC
- export NPROC
- ;;
- esac
- ;;
- esac
- eval PACKAGE_USE=$package_use
- export PACKAGE_USE
- # run the command
- case $run in
- '') case $show in
- ':') $exec exec $SHELL ;;
- esac
- ;;
- *) $exec exec $SHELL -c "$run"
- ;;
- esac
- ;;
- verify) cd $PACKAGEROOT
- requirements binary $package
- if executable ! $SUM
- then echo "$command: $action: $SUM command required" >&2
- exit 1
- fi
- case $target in
- '') cd arch
- set '' *
- shift
- target=$*
- cd ..
- ;;
- esac
- code=0
- for a in $target
- do case $package in
- '') set '' arch/$a/lib/package/gen/*.sum
- shift
- if test -f $1
- then for i
- do package_verify $i || code=1
- done
- else echo "$command: warning: $a: no binary packages" >&2
- fi
- ;;
- *) for i in $package
- do if test -f arch/$a/lib/package/gen/$i.sum
- then package_verify arch/$a/lib/package/gen/$i.sum || code=1
- else echo "$command: warning: $a: no binary package for $i" >&2
- fi
- done
- ;;
- esac
- done
- exit $code
- ;;
- write) set '' $target
- shift
- action=
- list=
- qualifier=
- while :
- do case $1 in
- base|closure|delta|exp|lcl|pkg|rpm|tgz)
- qualifier="$qualifier $1"
- ;;
- binary) action=$1
- type=$HOSTTYPE
- eval list=$PACKAGESRC/tgz/$admin_list
- ;;
- cyg) qualifier="$qualifier $1"
- assign="$assign closure=1"
- only=1
- ;;
- runtime|source)
- action=$1
- ;;
- tst) qualifier="$qualifier tgz"
- assign="$assign copyright=0 'PACKAGEDIR=\$(PACKAGESRC)/tst'"
- ;;
- nocopyright)
- assign="$assign copyright=0"
- ;;
- *) break
- ;;
- esac
- shift
- done
- case $action in
- '') echo "$command: binary or source operand expected" >&2
- exit 1
- ;;
- esac
- set '' "$@" $package
- shift
- case $only in
- 0) set '' `order "$@"`
- shift
- ;;
- esac
- case $# in
- 0) echo "$command: at least one package name expected" >&2
- exit 1
- ;;
- esac
- if nonmake $MAKE
- then echo "$command: must have $MAKE to generate archives" >&2
- exit 1
- fi
- # all work under $PACKAGEBIN
- $make cd $PACKAGEBIN
- case $list in
- ?*) $exec rm -f $list ;;
- esac
- # go for it
- for package
- do if view - all $package.pkg || view - all lib/package/$package.pkg
- then eval capture \$MAKE \$makeflags -X ignore \$noexec -f \$package.pkg \$qualifier \$action $assign
- else echo "$command: $package: not a package" >&2
- fi
- done
- ;;
- TEST) set '' $target $package
- shift
- case $1 in
- binary|source)
- action=$1
- shift
- ;;
- esac
- order "$@"
- ;;
- *) echo "$command: $action: internal error" >&2
- exit 1
- ;;
- esac
- exit "$error_status"
|