summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortron <tron@pkgsrc.org>1999-09-19 23:58:36 +0000
committertron <tron@pkgsrc.org>1999-09-19 23:58:36 +0000
commitb6583e7e9b66c85b37c909e22cdbff382de05607 (patch)
treef8dabce0e4fbad1002b64024c5c64c4ab95e5259
parent5c2180de0608c27565043658d9aaa128c2dcb3b4 (diff)
downloadpkgsrc-b6583e7e9b66c85b37c909e22cdbff382de05607.tar.gz
Update SuSE Linux emulation package to version 6.1p1. This patch level
invents a complete new "rpm2pkg" utility which is faster, easier to use and creates a correct package list more reliably.
-rw-r--r--emulators/suse_base/Makefile53
-rw-r--r--emulators/suse_base/files/rpm2pkg.c666
-rwxr-xr-xemulators/suse_base/scripts/rpm2pkg.sh77
-rw-r--r--emulators/suse_compat/Makefile30
-rw-r--r--emulators/suse_devel/Makefile41
-rw-r--r--emulators/suse_libc5/Makefile31
-rw-r--r--emulators/suse_linux/Makefile10
-rw-r--r--emulators/suse_linux/suse.mk41
-rw-r--r--emulators/suse_x11/Makefile32
-rw-r--r--emulators/suse_xforms/Makefile30
10 files changed, 771 insertions, 240 deletions
diff --git a/emulators/suse_base/Makefile b/emulators/suse_base/Makefile
index 9b03a61ef8b..58a594ae235 100644
--- a/emulators/suse_base/Makefile
+++ b/emulators/suse_base/Makefile
@@ -1,65 +1,56 @@
-# $NetBSD: Makefile,v 1.8 1999/06/29 22:48:19 tron Exp $
+# $NetBSD: Makefile,v 1.9 1999/09/19 23:58:36 tron Exp $
-DISTNAME= suse_base-6.1
+DISTNAME= suse_base-6.1p1
CATEGORIES= emulators
-MASTER_SITES= ftp://ftp.suse.com/pub/suse/i386/6.1/suse/a1/ \
- ftp://ftp.cs.unm.edu/mirrors/SuSE61/suse/a1/
-DISTFILES= aaa_dir.rpm shlibs.rpm ldso.rpm \
- bash.rpm gppshare.rpm ncurses.rpm
-ONLY_FOR_PLATFORM= NetBSD-*-i386
+MASTER_SITES= ${MASTER_SITE_SUSE:=a1/}
+DISTFILES= ${RPMFILES}
MAINTAINER= tron@netbsd.org
HOMEPAGE= http://www.suse.com/
-DEPENDS= rpm-2.5.4:../../misc/rpm
+BUILD_DEPENDS+= ${RPMLIB}:../../misc/rpm
CONFLICTS= linux_SuSE-5.3 linux_lib-2.4
-
-DIST_SUBDIR= suse
-MIRROR_DISTFILE= no
+ONLY_FOR_PLATFORM= NetBSD-*-i386
EXTRACT_ONLY= # empty
-NO_WRKSUBDIR= yes
-MANCOMPRESSED= yes
PLIST_SRC= ${WRKDIR}/PLIST_DYNAMIC
-EMULSUBDIR= emul/linux
-EMULDIR= ${PREFIX}/${EMULSUBDIR}
+RPMFILES= aaa_dir.rpm shlibs.rpm ldso.rpm \
+ bash.rpm gppshare.rpm ncurses.rpm
+RPMIGNOREPATH= tmp usr/tmp var
+
LDD= ${PREFIX}/${EMULSUBDIR}/usr/bin/ldd
-SBINDIR= ${PREFIX}/sbin
+RPMLIB= ${LOCALBASE}/lib/librpm.a
do-build:
+ ${CC} ${FILESDIR}/rpm2pkg.c ${CFLAGS} -I${PREFIX}/include/rpm \
+ ${RPMLIB} -lz -o ${WRKSRC}/rpm2pkg
@for FILE in ${PKGDIR}/PLIST ${SCRIPTDIR}/*.sh; do \
${SED} -e 's#@@EMULDIR@@#${EMULDIR}#g' \
-e 's#@@EMULSUBDIR@@#${EMULSUBDIR}#g' \
- -e 's#@@AWK@@#${AWK}#g' \
- -e 's#@@PAX@@#${PAX}#g' \
- -e 's#@@PREFIX@@#${PREFIX}#g' \
<$$FILE >${WRKDIR}/`basename $$FILE`; \
done
do-install:
- cd ${WRKDIR}; \
- for FILE in *.sh; do \
- ${INSTALL_SCRIPT} $$FILE ${SBINDIR}/`basename $$FILE .sh`; \
+ for FILE in ${WRKDIR}/*.sh; do \
+ ${INSTALL_SCRIPT} $$FILE ${PREFIX}/sbin/`basename $$FILE .sh`; \
done
+ ${INSTALL_PROGRAM} ${WRKSRC}/rpm2pkg ${PREFIX}/sbin
${MKDIR} ${EMULDIR}/dev
${LN} -fs /dev/sound ${EMULDIR}/dev/dsp
${LN} -fs /dev/null ${EMULDIR}/dev/null
@${CP} ${WRKDIR}/PLIST ${PLIST_SRC}
- cd ${_DISTDIR} && \
- ${SBINDIR}/rpm2pkg ${DISTFILES} | \
- ${EGREP} -v '${EMULSUBDIR}/(tmp|usr/tmp|var)' >>${PLIST_SRC}
- @cd ${EMULDIR} && ${RM} -rf tmp usr/tmp var
+ ${RPM2PKG} ${RPM2PKGARGS}
+ ${ECHO} "@dirrm ${EMULSUBDIR}" >>${PLIST_SRC}
${INSTALL_DATA} ${FILESDIR}/ld.so.conf ${EMULDIR}/etc
+ ${EMULDIR}/sbin/ldconfig -r ${EMULDIR}
+ ${ECHO} "@exec %D/${EMULSUBDIR}/sbin/ldconfig -r %D/${EMULSUBDIR}" \
+ >>${PLIST_SRC}
${SED} -e 's:#! :#! /${EMULSUBDIR}:' \
-e 's:^RTLD=:RTLD=/${EMULSUBDIR}:' <${LDD} >${LDD}.new
${MV} ${LDD}.new ${LDD}
${CHMOD} +x ${LDD}
- @${ECHO} "@unexec rm -rf %D/${EMULSUBDIR}" >>${PLIST_SRC}
@${SETENV} PKG_PREFIX="${PREFIX}" ${SH} ${INSTALL_FILE} - POST-INSTALL
-show-shlib-type:
- @${ECHO} linux-${MACHINE_ARCH}
-
-.include "../../mk/bsd.pkg.mk"
+.include "../suse_linux/suse.mk"
diff --git a/emulators/suse_base/files/rpm2pkg.c b/emulators/suse_base/files/rpm2pkg.c
new file mode 100644
index 00000000000..699d571030d
--- /dev/null
+++ b/emulators/suse_base/files/rpm2pkg.c
@@ -0,0 +1,666 @@
+/*
+
+ $NetBSD: rpm2pkg.c,v 1.1 1999/09/19 23:58:37 tron Exp $
+
+*/
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <cpio.h>
+#include <rpmlib.h>
+#include <zlib.h>
+
+char CPIOMagic[] = {'0','7','0','7','0','1'};
+
+#define CPIO_END_MARKER "TRAILER!!!"
+#define CPIO_FIELD_LENGTH 8
+
+#define CPIO_HDR_MODE 1
+#define CPIO_HDR_FILESIZE 6
+#define CPIO_HDR_NAMESIZE 11
+#define CPIO_NUM_HEADERS 13
+
+#define CP_IFMT 0170000
+
+#define TRUE 1
+#define FALSE 0
+
+#define GZREAD(s,b,l) (gzread((s),(b),(l))==l)
+
+extern char *__progname;
+
+struct ModeMap
+ {
+ long mm_CPIOMode;
+ mode_t mm_SysMode;
+ };
+struct ModeMap ModeMapTab[] =
+ {
+ {C_IRUSR,S_IRUSR},
+ {C_IWUSR,S_IWUSR},
+ {C_IXUSR,S_IXUSR},
+ {C_IRGRP,S_IRGRP},
+ {C_IWGRP,S_IWGRP},
+ {C_IXGRP,S_IXGRP},
+ {C_IROTH,S_IROTH},
+ {C_IWOTH,S_IWOTH},
+ {C_IXOTH,S_IXOTH},
+ {C_ISUID,S_ISUID},
+ {C_ISGID,S_ISGID},
+ {C_ISVTX,S_ISVTX},
+ {0,0}
+ };
+
+typedef struct PListEntryStruct PListEntry;
+struct PListEntryStruct
+ {
+ PListEntry *pe_Childs[2];
+ int pe_DirEmpty;
+ mode_t pe_DirMode;
+ char *pe_Link;
+ char pe_Name[1];
+ };
+
+#define pe_Left pe_Childs[0]
+#define pe_Right pe_Childs[1]
+
+typedef void PListEntryFunc(PListEntry *,FILE *);
+
+#define PLIST_ORDER_FORWARD 0
+#define PLIST_ORDER_BACKWARD 1
+
+PListEntry *InsertPListEntry(PListEntry **Tree,char *Name)
+
+{
+ PListEntry *Node;
+
+ while ((Node=*Tree)!=NULL)
+ Tree=&((strcmp(Name,Node->pe_Name)<0)?Node->pe_Left:Node->pe_Right);
+
+ if ((Node=malloc(sizeof(PListEntry)+strlen(Name)))==NULL)
+ {
+ perror(__progname);
+ exit(EXIT_FAILURE);
+ }
+
+ Node->pe_Left=NULL;
+ Node->pe_Right=NULL;
+ Node->pe_DirEmpty=FALSE;
+ Node->pe_Link=NULL;
+ (void)strcpy(Node->pe_Name,Name);
+
+ return *Tree=Node;
+}
+
+PListEntry *FindPListEntry(PListEntry *Tree,char *Name)
+
+{
+ while (Tree!=NULL)
+ {
+ int Result;
+
+ if ((Result=strcmp(Name,Tree->pe_Name))==0) break;
+ Tree=(Result<0)?Tree->pe_Left:Tree->pe_Right;
+ }
+
+ return Tree;
+}
+
+void PListEntryFile(PListEntry *Node,FILE *Out)
+
+{
+ (void)fputs(Node->pe_Name,Out);
+ (void)fputc('\n',Out);
+}
+
+void PListEntryLink(PListEntry *Node,FILE *Out)
+
+{
+ (void)fprintf(Out,"@exec ln -fs %s %%D/%s\n",Node->pe_Link,Node->pe_Name);
+ (void)fprintf(Out,"@unexec rm -f %%D/%s\n",Node->pe_Name);
+}
+
+void PListEntryMakeDir(PListEntry *Node,FILE *Out)
+
+{
+ if (Node->pe_DirEmpty)
+ (void)fprintf(Out,
+ "@exec mkdir -m %o -p %%D/%s\n",
+ Node->pe_DirMode,
+ Node->pe_Name);
+}
+
+void PListEntryRemoveDir(PListEntry *Node,FILE *Out)
+
+{
+ (void)fprintf(Out,"@dirrm %s\n",Node->pe_Name);
+}
+
+void ProcessPList(PListEntry *Tree,PListEntryFunc Func,int Order,FILE *Out)
+
+{
+ while (Tree!=NULL)
+ {
+ if (Tree->pe_Childs[Order]!=NULL)
+ ProcessPList(Tree->pe_Childs[Order],Func,Order,Out);
+ Func(Tree,Out);
+ Tree=Tree->pe_Childs[1-Order];
+ }
+}
+
+char **ArrayAdd(char **Array,char *String)
+
+{
+ int Old;
+
+ Old=0;
+ if (Array!=NULL) while (Array[Old]!=NULL) Old++;
+ if ((Array=realloc(Array,sizeof(char *)*(Old+2)))==NULL) return NULL;
+
+ Array[Old++]=String;
+ Array[Old]=NULL;
+
+ return Array;
+}
+
+void Usage(void)
+
+{
+ (void)fprintf(stderr,
+ "Usage: %s [-d directory] [-f packlist] [[-i ignorepath] ...]\n"
+ " [-p prefix] rpmfile [...]\n",
+ __progname);
+ exit(EXIT_FAILURE);
+}
+
+int SkipAndAlign(gzFile In,long Skip)
+
+{
+ z_off_t Pos,NewPos;
+
+ if ((Pos=gztell(In))<0) return FALSE;
+
+ NewPos=(Pos+Skip+3)&(~3);
+ return ((Pos==NewPos)||(gzseek(In,NewPos,SEEK_SET)==NewPos));
+}
+
+char *GetData(gzFile In,long Length)
+
+{
+ char *Ptr;
+
+ if ((Ptr=malloc(Length+1))!=NULL)
+ {
+ if (GZREAD(In,Ptr,Length)&&SkipAndAlign(In,0))
+ {
+ Ptr[Length]='\0';
+ return Ptr;
+ }
+ free(Ptr);
+ }
+
+ return NULL;
+}
+
+int GetCPIOHeader(gzFile In,long *Fields,char **Name)
+
+{
+ char Buffer[CPIO_NUM_HEADERS*CPIO_FIELD_LENGTH];
+ char *Ptr;
+ int Index;
+ long Value;
+
+ *Name=NULL;
+
+ if (!GZREAD(In,Buffer,sizeof(CPIOMagic))) return FALSE;
+ if (memcmp(Buffer,CPIOMagic,sizeof(CPIOMagic))!=0) return FALSE;
+
+ if (gzread(In,Buffer,sizeof(Buffer))!=sizeof(Buffer)) return FALSE;
+ Ptr=Buffer;
+ Index=sizeof(Buffer);
+ Value=0;
+ while (Index-->0)
+ {
+ Value<<=4;
+ if ((*Ptr>='0')&&(*Ptr<='9')) Value+=(long)(*Ptr++-'0');
+ else
+ if ((*Ptr>='A')&&(*Ptr<='F')) Value+=(long)(*Ptr++-'A')+10;
+ else
+ if ((*Ptr>='a')&&(*Ptr<='f')) Value+=(long)(*Ptr++-'a')+10;
+ else return FALSE;
+
+ if ((Index%CPIO_FIELD_LENGTH)==0)
+ {
+ *Fields++=Value;
+ Value=0;
+ }
+ }
+
+ Value=Fields[CPIO_HDR_NAMESIZE-CPIO_NUM_HEADERS];
+ if ((*Name=GetData(In,Value))==NULL) return FALSE;
+ return ((*Name)[Value-1]=='\0');
+}
+
+mode_t ConvertMode(long CPIOMode)
+
+{
+ mode_t Mode;
+ int Index;
+
+ Mode=0;
+ Index=0;
+ while (ModeMapTab[Index].mm_CPIOMode!=0)
+ {
+ if ((CPIOMode&ModeMapTab[Index].mm_CPIOMode)!=0)
+ Mode|=ModeMapTab[Index].mm_SysMode;
+ Index++;
+ }
+
+ return Mode;
+}
+
+int MakeTargetDir(char *Name,PListEntry **Dirs,int MarkNonEmpty)
+
+{
+ char *Basename;
+ PListEntry *Dir;
+ struct stat Stat;
+ int Result;
+
+ if ((Basename=strrchr(Name,'/'))==NULL) return TRUE;
+
+ *Basename='\0';
+ if ((Dir=FindPListEntry(*Dirs,Name))!=NULL)
+ {
+ *Basename='/';
+ Dir->pe_DirEmpty=!MarkNonEmpty;
+ return TRUE;
+ }
+
+ if (!MakeTargetDir(Name,Dirs,TRUE))
+ {
+ *Basename='/';
+ return FALSE;
+ }
+
+ if (stat(Name,&Stat)==0) Result=S_ISDIR(Stat.st_mode);
+ else
+ if (errno!=ENOENT) Result=FALSE;
+ else
+ if ((Result=(mkdir(Name,S_IRWXU|S_IRWXG|S_IRWXO)==0)))
+ InsertPListEntry(Dirs,Name)->pe_DirMode=S_IRWXU|S_IRWXG|S_IRWXO;
+
+ *Basename='/';
+ return Result;
+}
+
+char *StrCat(char *Prefix,char *Suffix)
+
+{
+ int Length;
+ char *Str;
+
+ Length=strlen(Prefix);
+ if ((Str=malloc(Length+strlen(Suffix)+1))!=NULL)
+ {
+ (void)memcpy(Str,Prefix,Length);
+ (void)strcpy(&Str[Length],Suffix);
+ }
+ return Str;
+}
+
+int MakeDir(char *Name,mode_t Mode,int *OldDir)
+
+{
+ struct stat Stat;
+
+ *OldDir=FALSE;
+ if (mkdir(Name,Mode)==0) return TRUE;
+
+ if ((errno!=EEXIST)||
+ (lstat(Name,&Stat)<0)||
+ !S_ISDIR(Stat.st_mode)) return FALSE;
+
+ *OldDir=TRUE;
+ return TRUE;
+}
+
+int MakeSymLink(char *Link,char *Name)
+
+{
+ struct stat Stat;
+
+ if (symlink(Link,Name)==0) return TRUE;
+
+ if ((errno!=EEXIST)||
+ (lstat(Name,&Stat)<0)||
+ !S_ISLNK(Stat.st_mode)) return FALSE;
+
+ return ((unlink(Name)==0)&&(symlink(Link,Name)==0));
+}
+
+int WriteFile(gzFile In,char *Name,mode_t Mode,long Length)
+
+{
+ int Out;
+ struct stat Stat;
+ static void *Buffer=NULL;
+ static long BufferSize=0;
+
+ if (lstat(Name,&Stat)==0)
+ if (!S_ISREG(Stat.st_mode)||(unlink(Name)<0)) return FALSE;
+
+ if (Buffer==NULL)
+ {
+ BufferSize=sysconf(_SC_PAGESIZE)*256;
+ if ((Buffer=malloc(BufferSize))==NULL) return FALSE;
+ }
+
+ if ((Out=open(Name,O_WRONLY|O_CREAT,Mode))<=0) return FALSE;
+
+ while (Length>0)
+ {
+ long Chunk;
+
+ Chunk=(Length>BufferSize)?BufferSize:Length;
+ if (!GZREAD(In,Buffer,Chunk)) break;
+ if (write(Out,Buffer,Chunk)!=Chunk) break;
+ Length-=Chunk;
+ }
+
+ if ((close(Out)==0)&&(Length==0)) return SkipAndAlign(In,0);
+
+ (void)unlink(Name);
+ return FALSE;
+}
+
+int main(int argc,char **argv)
+
+{
+ FILE *PList;
+ char **Ignore,*Prefix;
+ int Opt,Index,FD,IsSource;
+ PListEntry *Files,*Links,*Dirs;
+ Header Hdr;
+ gzFile In;
+
+ PList=NULL;
+ Ignore=NULL;
+ Prefix=NULL;
+ while ((Opt=getopt(argc,argv,"d:f:i:p:"))!=-1)
+ switch (Opt)
+ {
+ case 'f':
+ if (PList!=NULL) (void)fclose(PList);
+ if ((PList=fopen(optarg,"a"))==NULL)
+ {
+ perror(optarg);
+ return EXIT_FAILURE;
+ }
+ break;
+ case 'i':
+ if ((Ignore=ArrayAdd(Ignore,optarg))==NULL)
+ {
+ perror(__progname);
+ exit(EXIT_FAILURE);
+ }
+ break;
+ case 'd':
+ if (chdir(optarg))
+ {
+ perror(optarg);
+ return EXIT_FAILURE;
+ }
+ break;
+ case 'p':
+ Prefix=optarg;
+ break;
+ default:
+ Usage();
+ }
+
+ if (Prefix!=NULL)
+ {
+ int Length;
+
+ Length=strlen(Prefix);
+ if (Length==0) Prefix=NULL;
+ else
+ if ((Prefix[Length-1]!='/')&&((Prefix=StrCat(Prefix,"/"))==NULL))
+ {
+ perror(__progname);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ argc-=optind;
+ argv+=optind;
+ if (argc==0) Usage();
+
+ Files=NULL;
+ Links=NULL;
+ Dirs=NULL;
+ for (Index=0; Index<argc; Index++)
+ {
+ if ((FD=open(argv[Index],O_RDONLY,0))<0)
+ {
+ perror(argv[Index]);
+ return EXIT_FAILURE;
+ }
+
+ switch (rpmReadPackageHeader(FD,&Hdr,&IsSource,NULL,NULL))
+ {
+ case 0:
+ break;
+ case 1:
+ (void)fprintf(stderr,"%s: file is not an RPM package.\n",argv[Index]);
+ return EXIT_FAILURE;
+ default:
+ (void)fprintf(stderr,"%s: error reading header.\n",argv[Index]);
+ return EXIT_FAILURE;
+ }
+
+ if ((In=gzdopen(FD,"r"))==NULL)
+ {
+ (void)fprintf(stderr,"%s: cannot read cpio data.\n",argv[Index]);
+ return EXIT_FAILURE;
+ }
+
+ for (;;)
+ {
+ long Fields[CPIO_NUM_HEADERS];
+ char *Name;
+ mode_t Mode;
+ long Length;
+
+ if (!GetCPIOHeader(In,Fields,&Name))
+ {
+ (void)fprintf(stderr,"%s: error in cpio header.\n",argv[Index]);
+ return EXIT_FAILURE;
+ }
+ if (strcmp(Name,CPIO_END_MARKER)==0)
+ {
+ free(Name);
+ break;
+ }
+ if (*Name=='\0') Fields[CPIO_HDR_MODE]=0;
+
+ if (Ignore!=NULL)
+ {
+ char **Ptr;
+
+ Ptr=Ignore;
+ while (*Ptr!=NULL)
+ {
+ int Length;
+
+ Length=strlen(*Ptr);
+ if ((strncmp(*Ptr,Name,Length)==0)&&
+ ((Name[Length]=='\0')||(Name[Length]=='/'))) break;
+ else Ptr++;
+ }
+ if (*Ptr!=NULL) Fields[CPIO_HDR_MODE]=0;
+ }
+
+ if (Prefix!=NULL)
+ {
+ char *Fullname;
+
+ if ((Fullname=StrCat(Prefix,Name))==NULL)
+ {
+ perror(__progname);
+ exit(EXIT_FAILURE);
+ }
+ free(Name);
+ Name=Fullname;
+ }
+
+ Mode=ConvertMode(Fields[CPIO_HDR_MODE]);
+ Length=Fields[CPIO_HDR_FILESIZE];
+ switch (Fields[CPIO_HDR_MODE]&CP_IFMT)
+ {
+ case C_ISDIR:
+ {
+ PListEntry *Dir;
+ int OldDir;
+
+ if (Length!=0)
+ {
+ (void)fprintf(stderr,"%s: error in cpio file.\n",argv[Index]);
+ return EXIT_FAILURE;
+ }
+ if (!MakeTargetDir(Name,&Dirs,TRUE))
+ {
+ (void)fprintf(stderr,
+ "%s: can't create parent directories for \"%s\".\n",
+ argv[Index],
+ Name);
+ return EXIT_FAILURE;
+ }
+
+ if (!MakeDir(Name,Mode,&OldDir))
+ {
+ (void)fprintf(stderr,
+ "%s: can't create directory \"%s\".\n",
+ argv[Index],
+ Name);
+ return EXIT_FAILURE;
+ }
+
+ if (!OldDir)
+ {
+ Dir=InsertPListEntry(&Dirs,Name);
+ Dir->pe_DirEmpty=TRUE;
+ Dir->pe_DirMode=Mode;
+ }
+ break;
+ }
+ case C_ISLNK:
+ {
+ char *Link;
+ struct stat Stat;
+
+ if ((Link=GetData(In,Length))==NULL)
+ {
+ (void)fprintf(stderr,"%s: error in cpio file.\n",argv[Index]);
+ return EXIT_FAILURE;
+ }
+
+ if (!MakeTargetDir(Name,&Dirs,FALSE))
+ {
+ (void)fprintf(stderr,
+ "%s: can't create parent directories for \"%s\".\n",
+ argv[Index],
+ Name);
+ return EXIT_FAILURE;
+ }
+
+ if (*Link=='/')
+ {
+ char *Ptr;
+
+ (void)strcpy(Link,Link+1);
+ Ptr=Name;
+ if (Prefix!=NULL) Ptr+=strlen(Prefix);
+ while ((Ptr=strchr(Ptr,'/'))!=NULL)
+ {
+ char *NewLink;
+
+ if ((NewLink=StrCat("../",Link))==NULL)
+ {
+ perror(__progname);
+ return EXIT_FAILURE;
+ }
+ free(Link);
+ Link=NewLink;
+
+ Ptr++;
+ }
+ }
+ if (!MakeSymLink(Link,Name))
+ {
+ (void)fprintf(stderr,
+ "%s: can't create symbolic link \"%s\".\n",
+ argv[Index],
+ Name);
+ return EXIT_FAILURE;
+ }
+
+ if ((stat(Name,&Stat)==0)&&S_ISREG(Stat.st_mode))
+ {
+ (void)InsertPListEntry(&Files,Name);
+ (void)MakeTargetDir(Name,&Dirs,TRUE);
+ }
+ else InsertPListEntry(&Links,Name)->pe_Link=Link;
+ break;
+ }
+ case C_ISREG:
+ if (!MakeTargetDir(Name,&Dirs,TRUE))
+ {
+ (void)fprintf(stderr,
+ "%s: can't create parent directories for \"%s\".\n",
+ argv[Index],
+ Name);
+ return EXIT_FAILURE;
+ }
+ if (!WriteFile(In,Name,Mode,Length))
+ {
+ (void)fprintf(stderr,
+ "%s: can't write file \"%s\".\n",
+ argv[Index],
+ Name);
+ return EXIT_FAILURE;
+ }
+ (void)InsertPListEntry(&Files,Name);
+ break;
+ default:
+ if ((Length>0)&&(gzseek(In,(Length+3)&(~3),SEEK_CUR)<0)) break;
+ }
+
+ free(Name);
+ }
+
+ (void)gzclose(In);
+ (void)close(FD);
+ }
+
+ if (PList!=NULL)
+ {
+ ProcessPList(Files,PListEntryFile,PLIST_ORDER_FORWARD,PList);
+ ProcessPList(Dirs,PListEntryMakeDir,PLIST_ORDER_FORWARD,PList);
+ ProcessPList(Links,PListEntryLink,PLIST_ORDER_FORWARD,PList);
+ ProcessPList(Dirs,PListEntryRemoveDir,PLIST_ORDER_BACKWARD,PList);
+ (void)fclose(PList);
+ }
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/emulators/suse_base/scripts/rpm2pkg.sh b/emulators/suse_base/scripts/rpm2pkg.sh
deleted file mode 100755
index 1ce74db2a50..00000000000
--- a/emulators/suse_base/scripts/rpm2pkg.sh
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/sh
-export PATH=/bin:/usr/bin:@@PREFIX@@/bin
-
-TMPDIR=/tmp/.rpm.$$.`date +%s`
-LIST=$TMPDIR/LIST
-DIRS=$TMPDIR/DIRS
-FILES=$TMPDIR/FILES
-LINKS=$TMPDIR/LINKS
-
-if ! rm -rf $TMPDIR
-then
- exit 1
-fi
-if ! mkdir -p $TMPDIR/@@EMULSUBDIR@@
-then
- exit 1
-fi
-
-touch $LIST
-for RPM
-do
- rpm2cpio $RPM | (cd @@EMULDIR@@; @@PAX@@ -r -v 2>>$LIST)
-done
-
-touch $DIRS $LINKS
-cd @@PREFIX@@
-grep -v ^pax:\ $LIST | @@AWK@@ '{print("@@EMULSUBDIR@@/"$1)}' |
-(while read ENTRY
- do
- if [ -L "$ENTRY" ]
- then
- set - `file $ENTRY`
- shift `expr $# - 1`;
- case $1 in
- /* )
- TARGET=`echo $1 | cut -c 2-`
- DIR=`dirname $ENTRY`
- while [ $DIR != @@EMULSUBDIR@@ ]
- do
- TARGET=../$TARGET
- DIR=`dirname $DIR`
- done
- unset DIR
- rm $ENTRY
- ln -s $TARGET $ENTRY
- ;;
- * )
- TARGET=$1
- esac
- if cd `dirname $ENTRY` && test -f $TARGET
- then
- echo $ENTRY
- else
- echo "@exec ln -s $TARGET %D/$ENTRY" >>$LINKS
- echo "@unexec rm -f %D/$ENTRY" >>$LINKS
- fi
- cd @@PREFIX@@
- else
- if [ -f "$ENTRY" ]
- then
- echo "$ENTRY"
- else
- if [ -d "$ENTRY" ]
- then
- echo "$ENTRY" >>$DIRS
- fi
- fi
- fi
- done) >$FILES
-
-cat $FILES
-sort $DIRS | awk '{print("@exec mkdir -p %D/"$1)}'
-cat $LINKS
-sort -r $DIRS | awk '{print("@unexec rmdir %D/"$1" >/dev/null 2>&1 || true")}'
-
-rm -rf $TMPDIR
-exit 0
diff --git a/emulators/suse_compat/Makefile b/emulators/suse_compat/Makefile
index 94192440334..04119900213 100644
--- a/emulators/suse_compat/Makefile
+++ b/emulators/suse_compat/Makefile
@@ -1,38 +1,20 @@
-# $NetBSD: Makefile,v 1.3 1999/05/24 21:27:14 tron Exp $
+# $NetBSD: Makefile,v 1.4 1999/09/19 23:58:41 tron Exp $
DISTNAME= compat
-PKGNAME= suse_compat-6.1
+PKGNAME= suse_compat-6.1p1
CATEGORIES= emulators
-MASTER_SITES= ftp://ftp.suse.com/pub/suse/i386/6.1/suse/a2/ \
- ftp://ftp.cs.unm.edu/mirrors/SuSE61/suse/a2/
+MASTER_SITES= ${MASTER_SITE_SUSE:=a2/}
EXTRACT_SUFX= .rpm
-ONLY_FOR_PLATFORM= NetBSD-*-i386
MAINTAINER= tron@netbsd.org
HOMEPAGE= http://www.suse.com/
-DEPENDS= suse_base-6.1:../suse_base
-
-DIST_SUBDIR= suse
-MIRROR_DISTFILE= no
+DEPENDS+= suse_base-6.1p1:../suse_base
EXTRACT_ONLY= # empty
NO_BUILD= yes
-NO_WRKSUBDIR= yes
-MANCOMPRESSED= yes
PLIST_SRC= ${WRKDIR}/PLIST_DYNAMIC
-EMULSUBDIR= emul/linux
-EMULDIR= ${PREFIX}/${EMULSUBDIR}
-SBINDIR= ${PREFIX}/sbin
-
-do-install:
- cd ${_DISTDIR} && \
- ${SBINDIR}/rpm2pkg ${DISTFILES} >${PLIST_SRC}
- @${ECHO} "@exec %D/${EMULSUBDIR}/sbin/ldconfig -r %D/${EMULSUBDIR}" >>${PLIST_SRC}
- ${EMULDIR}/sbin/ldconfig -r ${EMULDIR} || ${TRUE}
-
-show-shlib-type:
- @${ECHO} linux-${MACHINE_ARCH}
+RPMFILES= ${DISTNAME}${EXTRACT_SUFX}
-.include "../../mk/bsd.pkg.mk"
+.include "../suse_linux/suse.mk"
diff --git a/emulators/suse_devel/Makefile b/emulators/suse_devel/Makefile
index 086ae19b58d..b7ca036cff2 100644
--- a/emulators/suse_devel/Makefile
+++ b/emulators/suse_devel/Makefile
@@ -1,39 +1,20 @@
-# $NetBSD: Makefile,v 1.1.1.1 1999/08/24 21:24:57 tron Exp $
+# $NetBSD: Makefile,v 1.2 1999/09/19 23:58:41 tron Exp $
-DISTNAME= suse_devel-6.1
-CATEGORIES= emulators devel
-MASTER_SITES= ftp://ftp.suse.com/pub/suse/i386/6.1/suse/d1/ \
- ftp://ftp.cs.unm.edu/mirrors/SuSE61/suse/d1/
-DISTFILES= bin86.rpm binutils.rpm egcs.rpm g77.rpm gpp.rpm \
- libc.rpm linclude.rpm make.rpm
+DISTNAME= suse_devel-6.1p1
+CATEGORIES= emulators
+MASTER_SITES= ${MASTER_SITE_SUSE:=x1/}
+DISTFILES= ${RPMFILES}
-MAINTAINER= wennmach@geo.Uni-Koeln.DE
+MAINTAINER= tron@netbsd.org
HOMEPAGE= http://www.suse.com/
-DEPENDS= suse_base-6.1:../suse_base
-
-ONLY_FOR_PLATFORM= NetBSD-*-i386
-
-DIST_SUBDIR= suse
-MIRROR_DISTFILE= no
+DEPENDS+= suse_base-6.1p1:../suse_base
EXTRACT_ONLY= # empty
-NO_BUILD= yes
-NO_WRKSUBDIR= yes
-MANCOMPRESSED= yes
+NO_BUILD= yes
PLIST_SRC= ${WRKDIR}/PLIST_DYNAMIC
-EMULSUBDIR= emul/linux
-EMULDIR= ${PREFIX}/${EMULSUBDIR}
-SBINDIR= ${PREFIX}/sbin
-
-do-install:
- cd ${_DISTDIR} && \
- ${SBINDIR}/rpm2pkg ${DISTFILES} >${PLIST_SRC}
- @${ECHO} "@exec %D/${EMULSUBDIR}/sbin/ldconfig -r %D/${EMULSUBDIR}" >>${PLIST_SRC}
- ${EMULDIR}/sbin/ldconfig -r ${EMULDIR} || ${TRUE}
-
-show-shlib-type:
- @${ECHO} linux-${MACHINE_ARCH}
+RPMFILES= bin86.rpm binutils.rpm egcs.rpm g77.rpm gpp.rpm \
+ libc.rpm linclude.rpm make.rpm
-.include "../../mk/bsd.pkg.mk"
+.include "../suse_linux/suse.mk"
diff --git a/emulators/suse_libc5/Makefile b/emulators/suse_libc5/Makefile
index 08332c31a8e..bab495853ed 100644
--- a/emulators/suse_libc5/Makefile
+++ b/emulators/suse_libc5/Makefile
@@ -1,38 +1,23 @@
-# $NetBSD: Makefile,v 1.8 1999/05/24 21:27:14 tron Exp $
+# $NetBSD: Makefile,v 1.9 1999/09/19 23:58:42 tron Exp $
DISTNAME= shlibs5
-PKGNAME= suse_libc5-6.1
+PKGNAME= suse_libc5-6.1p1
CATEGORIES= emulators
-MASTER_SITES= ftp://ftp.suse.com/pub/suse/i386/6.1/suse/a1/ \
- ftp://ftp.cs.unm.edu/mirrors/SuSE61/suse/a1/
+MASTER_SITES= ${MASTER_SITE_SUSE:=a1/}
EXTRACT_SUFX= .rpm
-ONLY_FOR_PLATFORM= NetBSD-*-i386
MAINTAINER= tron@netbsd.org
HOMEPAGE= http://www.suse.com/
-DEPENDS= suse_base-6.1:../suse_base
-
-DIST_SUBDIR= suse
-MIRROR_DISTFILE= no
+DEPENDS+= suse_compat-6.1p1:../suse_compat
EXTRACT_ONLY= # empty
NO_BUILD= yes
-NO_WRKSUBDIR= yes
-MANCOMPRESSED= yes
PLIST_SRC= ${WRKDIR}/PLIST_DYNAMIC
-EMULSUBDIR= emul/linux
-EMULDIR= ${PREFIX}/${EMULSUBDIR}
-SBINDIR= ${PREFIX}/sbin
-
-do-install:
- cd ${_DISTDIR} && \
- ${SBINDIR}/rpm2pkg ${DISTFILES} >${PLIST_SRC}
- @${ECHO} "@exec %D/${EMULSUBDIR}/sbin/ldconfig -r %D/${EMULSUBDIR}" >>${PLIST_SRC}
- ${EMULDIR}/sbin/ldconfig -r ${EMULDIR} || ${TRUE}
+RPMFILES= ${DISTNAME}${EXTRACT_SUFX}
-show-shlib-type:
- @${ECHO} linux-${MACHINE_ARCH}
+post-install:
+ ${ECHO} ${EMULSUBDIR}/usr/lib/libncurses.so.2.1 >>${PLIST_SRC}
-.include "../../mk/bsd.pkg.mk"
+.include "../suse_linux/suse.mk"
diff --git a/emulators/suse_linux/Makefile b/emulators/suse_linux/Makefile
index 98d9464e817..04b4f7df301 100644
--- a/emulators/suse_linux/Makefile
+++ b/emulators/suse_linux/Makefile
@@ -1,17 +1,15 @@
-# $NetBSD: Makefile,v 1.4 1999/05/24 21:27:14 tron Exp $
+# $NetBSD: Makefile,v 1.5 1999/09/19 23:58:42 tron Exp $
-DISTNAME= suse_linux-6.1
+DISTNAME= suse_linux-6.1p1
CATEGORIES= emulators
MASTER_SITES= # empty
DISTFILES= # empty
-ONLY_FOR_PLATFORM= NetBSD-*-i386
MAINTAINER= tron@netbsd.org
HOMEPAGE= http://www.suse.com/
-DEPENDS= suse_compat-6.1:../suse_compat \
- suse_libc5-6.1:../suse_libc5 \
- suse_xforms-6.1:../suse_xforms
+DEPENDS+= suse_libc5-6.1p1:../suse_libc5 \
+ suse_xforms-6.1p1:../suse_xforms
EXTRACT_ONLY= # empty
NO_BUILD= yes
diff --git a/emulators/suse_linux/suse.mk b/emulators/suse_linux/suse.mk
new file mode 100644
index 00000000000..f06a4d12ae2
--- /dev/null
+++ b/emulators/suse_linux/suse.mk
@@ -0,0 +1,41 @@
+# $NetBSD: suse.mk,v 1.1 1999/09/19 23:58:42 tron Exp $
+
+MASTER_SITE_SUSE= ftp://ftp.suse.com/pub/suse/i386/6.1/suse/ \
+ ftp://ftp.cs.unm.edu/mirrors/SuSE61/suse/
+
+DIST_SUBDIR= suse
+MIRROR_DISTFILE= no
+
+WRKSRC= ${WRKDIR}
+MANCOMPRESSED= yes
+
+EMULSUBDIR= emul/linux
+EMULDIR= ${PREFIX}/${EMULSUBDIR}
+EMULLDCONFIG=
+
+RPM2PKG= ${PREFIX}/sbin/rpm2pkg
+
+RPM2PKGARGS= -d ${PREFIX} -f ${PLIST_SRC} -p ${EMULSUBDIR}
+.for TEMP in ${RPMIGNOREPATH}
+RPM2PKGARGS+= -i ${TEMP}
+.endfor
+.for TEMP in ${RPMFILES}
+RPM2PKGARGS+= ${DISTDIR}/${DIST_SUBDIR}/${TEMP}
+.endfor
+
+.if !target(do-install)
+do-install:
+ @${RM} -f ${PLIST_SRC}
+ ${RPM2PKG} ${RPM2PKGARGS}
+ @if ${GREP} -q 'lib.*\.so' ${PLIST_SRC}; then \
+ ${ECHO_MSG} "===> [Automatic Linux shared object handling]"; \
+ ${EMULDIR}/sbin/ldconfig -r ${EMULDIR}; \
+ ${ECHO} "@exec %D/${EMULSUBDIR}/sbin/ldconfig -r %D/${EMULSUBDIR}" >>${PLIST_SRC}; \
+ ${ECHO} "@unexec %D/${EMULSUBDIR}/sbin/ldconfig -r %D/${EMULSUBDIR} 2>/dev/null" >>${PLIST_SRC}; \
+ fi
+.endif
+
+show-shlib-type:
+ @${ECHO} linux-${MACHINE_ARCH}
+
+.include "../../mk/bsd.pkg.mk"
diff --git a/emulators/suse_x11/Makefile b/emulators/suse_x11/Makefile
index 88aed508ef0..6b8df85afb5 100644
--- a/emulators/suse_x11/Makefile
+++ b/emulators/suse_x11/Makefile
@@ -1,37 +1,19 @@
-# $NetBSD: Makefile,v 1.6 1999/05/24 21:27:14 tron Exp $
+# $NetBSD: Makefile,v 1.7 1999/09/19 23:58:43 tron Exp $
-DISTNAME= suse_x11-6.1
+DISTNAME= suse_x11-6.1p1
CATEGORIES= emulators
-MASTER_SITES= ftp://ftp.suse.com/pub/suse/i386/6.1/suse/x1/ \
- ftp://ftp.cs.unm.edu/mirrors/SuSE61/suse/x1/
-DISTFILES= xshared.rpm xpm.rpm
-ONLY_FOR_PLATFORM= NetBSD-*-i386
+MASTER_SITES= ${MASTER_SITE_SUSE:=x1/}
+DISTFILES= ${RPMFILES}
MAINTAINER= tron@netbsd.org
HOMEPAGE= http://www.suse.com/
-DEPENDS= suse_base-6.1:../suse_base
-
-DIST_SUBDIR= suse
-MIRROR_DISTFILE= no
+DEPENDS+= suse_base-6.1p1:../suse_base
EXTRACT_ONLY= # empty
NO_BUILD= yes
-NO_WRKSUBDIR= yes
-MANCOMPRESSED= yes
PLIST_SRC= ${WRKDIR}/PLIST_DYNAMIC
-EMULSUBDIR= emul/linux
-EMULDIR= ${PREFIX}/${EMULSUBDIR}
-SBINDIR= ${PREFIX}/sbin
-
-do-install:
- cd ${_DISTDIR} && \
- ${SBINDIR}/rpm2pkg ${DISTFILES} >${PLIST_SRC}
- @${ECHO} "@exec %D/${EMULSUBDIR}/sbin/ldconfig -r %D/${EMULSUBDIR}" >>${PLIST_SRC}
- ${EMULDIR}/sbin/ldconfig -r ${EMULDIR} || ${TRUE}
-
-show-shlib-type:
- @${ECHO} linux-${MACHINE_ARCH}
+RPMFILES= xshared.rpm xpm.rpm
-.include "../../mk/bsd.pkg.mk"
+.include "../suse_linux/suse.mk"
diff --git a/emulators/suse_xforms/Makefile b/emulators/suse_xforms/Makefile
index 14eeabe53ea..f2b37310396 100644
--- a/emulators/suse_xforms/Makefile
+++ b/emulators/suse_xforms/Makefile
@@ -1,38 +1,20 @@
-# $NetBSD: Makefile,v 1.3 1999/05/24 21:27:14 tron Exp $
+# $NetBSD: Makefile,v 1.4 1999/09/19 23:58:43 tron Exp $
DISTNAME= xforms
-PKGNAME= suse_xforms-6.1
+PKGNAME= suse_xforms-6.1p1
CATEGORIES= emulators
-MASTER_SITES= ftp://ftp.suse.com/pub/suse/i386/6.1/suse/xdev1/ \
- ftp://ftp.cs.unm.edu/mirrors/SuSE61/suse/xdev1/
+MASTER_SITES= ${MASTER_SITE_SUSE:=xdev1/}
EXTRACT_SUFX= .rpm
-ONLY_FOR_PLATFORM= NetBSD-*-i386
MAINTAINER= tron@netbsd.org
HOMEPAGE= http://www.suse.com/
-DEPENDS= suse_x11-6.1:../suse_x11
-
-DIST_SUBDIR= suse
-MIRROR_DISTFILE= no
+DEPENDS+= suse_x11-6.1p1:../suse_x11
EXTRACT_ONLY= # empty
NO_BUILD= yes
-NO_WRKSUBDIR= yes
-MANCOMPRESSED= yes
PLIST_SRC= ${WRKDIR}/PLIST_DYNAMIC
-EMULSUBDIR= emul/linux
-EMULDIR= ${PREFIX}/${EMULSUBDIR}
-SBINDIR= ${PREFIX}/sbin
-
-do-install:
- cd ${_DISTDIR} && \
- ${SBINDIR}/rpm2pkg ${DISTFILES} >${PLIST_SRC}
- @${ECHO} "@exec %D/${EMULSUBDIR}/sbin/ldconfig -r %D/${EMULSUBDIR}" >>${PLIST_SRC}
- ${EMULDIR}/sbin/ldconfig -r ${EMULDIR} || ${TRUE}
-
-show-shlib-type:
- @${ECHO} linux-${MACHINE_ARCH}
+RPMFILES= ${DISTNAME}${EXTRACT_SUFX}
-.include "../../mk/bsd.pkg.mk"
+.include "../suse_linux/suse.mk"