[Odcctools-changes] [139] trunk

source_changes at macosforge.org source_changes at macosforge.org
Sat Sep 9 14:19:03 PDT 2006


Revision: 139
Author:   ssen at mit.edu
Date:     2006-09-09 14:19:01 -0700 (Sat, 09 Sep 2006)

Log Message:
-----------
Stop abusing Makefiles and use a shell script to patch

Modified Paths:
--------------
    trunk/README

Added Paths:
-----------
    trunk/extract.sh

Removed Paths:
-------------
    trunk/Makefile

Deleted: trunk/Makefile
===================================================================
--- trunk/Makefile	2006-06-09 04:24:17 UTC (rev 138)
+++ trunk/Makefile	2006-09-09 21:19:01 UTC (rev 139)
@@ -1,137 +0,0 @@
-CCTOOLSNAME=cctools
-CCTOOLSVERS=590.42.1
-CCTOOLSDISTFILE=$(CCTOOLSNAME)-$(CCTOOLSVERS).tar.bz2
-
-LD64NAME=ld64
-LD64VERS=47.2
-LD64DISTFILE=$(LD64NAME)-$(LD64VERS).tar.bz2
-
-DISTDIR=odcctools
-
-TOPSRCDIR=$(shell pwd)
-HOSTKERNEL=$(shell uname -s)
-TARSTRIP=$(TARSTRIP_$(HOSTKERNEL))
-TARSTRIP_Darwin=--strip-path
-TARSTRIP_Linux=--strip-components
-
-PATCHFILESDIR=$(TOPSRCDIR)/patches
-PATCHFILES=as/driver.c ld-Bstatic.diff as/getc_unlocked.diff		\
-	otool/nolibmstub.diff misc/ranlibname.diff			\
-	misc/libtool-ldpath.diff ar/ar-ranlibpath.diff			\
-	otool/noobjc.diff as/input-scrub.diff	\
-	as/messages.diff ar/contents.diff ar/errno.diff			\
-	ar/archive.diff misc/libtool-pb.diff ar/ar-printf.diff 		\
-	ld/ld-pb.diff ld-sysroot.diff as/relax.diff			\
-	as/bignum.diff \
-	misc/redo_prebinding.nomalloc.diff include/mach/machine.diff	\
-	ld/relocate-ld64.diff ld64/Options-stdarg.diff \
-	ld64/Options-defcross.diff misc/libtool-relocate-ld64.diff	\
-	ld/uuid-nonsmodule.diff misc/redo_prebinding.nogetattrlist.diff \
-	ld64/Options-ctype.diff ld64/ld64-case-variables.diff \
-	ld64/MachOReaderRelocatable-ctz.diff ld64/FileAbstraction-inline.diff
-
-
-ADDEDFILESDIR=$(TOPSRCDIR)/files
-
-default: none
-
-clean:
-	rm -rf $(DISTDIR)
-	rm -rf .state.*
-
-none:
-	@echo "Please choose an action:"
-	@echo "	extract"
-	@echo "	patch"
-	@echo "	regen"
-	@echo "	clean"
-
-
-extract:
-	if [ \! -f .state.extract ]; then			\
-		if [ \! -d $(DISTDIR) ]; then			\
-			mkdir -p $(DISTDIR);			\
-			tar $(TARSTRIP)=1 -jxf $(CCTOOLSDISTFILE) -C $(DISTDIR);		\
-			mkdir -p $(DISTDIR)/ld64;		\
-			tar $(TARSTRIP)=1 -jxf $(LD64DISTFILE) -C $(DISTDIR)/ld64; \
-			find $(DISTDIR)/ld64/doc/ \
-				-type f -exec cp "{}" $(DISTDIR)/man \; ;	\
-			find $(DISTDIR) -name \*.orig -exec rm -f "{}" \; ;	\
-			rm -rf $(DISTDIR)/{cbtlibs,dyld,file,gprof,libdyld,mkshlib,profileServer}; \
-			cp $(DISTDIR)/include/mach/machine.h $(DISTDIR)/include/mach/machine.h.new; \
-			for i in mach architecture i386 libkern; do	\
-				ditto /Developer/SDKs/MacOSX10.4u.sdk/usr/include/$$i $(DISTDIR)/include/$$i; \
-			done; \
-			cp $(DISTDIR)/include/mach/machine.h.new $(DISTDIR)/include/mach/machine.h; \
-		fi;						\
-		touch .state.extract;				\
-	fi
-
-patch: extract 
-	if [ \! -f .state.patch ]; then				\
-		for p in $(PATCHFILES); do			\
-			echo Applying patch $$p;		\
-			dir=`dirname $$p`;			\
-			( cd $(DISTDIR)/$$dir; 			\
-			  patch --no-backup-if-mismatch --posix -p0 < $(PATCHFILESDIR)/$$p );	\
-		done;						\
-		tar cf - --exclude=CVS -C $(ADDEDFILESDIR) . | 	\
-			tar xvf - -C $(DISTDIR);			\
-		find $(DISTDIR) -type f -name \*.[ch] | while read f; do \
-			sed -e 's/^#import/#include/' < $$f > $$f.tmp;	\
-			mv -f $$f.tmp $$f;				\
-		done;						\
-		find $(DISTDIR) -type f -name \*.h | while read f; do \
-			sed -e 's/^__private_extern__/extern/' < $$f > $$f.tmp;	\
-			mv -f $$f.tmp $$f;				\
-		done;						\
-		perl -pi -e 's/__GNUC__/__GNUC_UNUSED__/g;' $(DISTDIR)/include/libkern/OSByteOrder.h; \
-		touch .state.patch;				\
-	fi
-
-updatepatch: extract 
-	if [ \! -f .state.patch ]; then				\
-		for p in $(PATCHFILES); do			\
-			echo Applying patch $$p;		\
-			dir=`dirname $$p`;			\
-			( cd $(DISTDIR)/$$dir; 			\
-			  patch -b --posix -p0 < $(PATCHFILESDIR)/$$p; \
-			  if [ $$? -eq 1 ]; then			\
-				exit 1;				\
-			  fi;					\
-			  ( find . -type f | while read f; do	\
-				if [ -f "$$f.orig" ]; then	\
-					diff -u -N "$$f.orig" "$$f";	\
-				fi;				\
-			  done) > $(PATCHFILESDIR)/$$p;		\
-			  find . -type f -name \*.orig -exec rm -f "{}" \;; \
-			);					\
-		done;						\
-		tar cf - --exclude=CVS -C $(ADDEDFILESDIR) . | 	\
-			tar xvf - -C $(DISTDIR);			\
-		find $(DISTDIR) -type f -name \*.[ch] | while read f; do \
-			sed 's/^#import/#include/' < $$f > $$f.tmp;	\
-			mv -f $$f.tmp $$f;				\
-		done;						\
-		touch .state.patch;				\
-	fi
-
-regen: patch
-	if [ \! -f .state.regen ]; then				\
-		find $(DISTDIR) -name Makefile -exec rm -f "{}" \; ;	\
-		find $(DISTDIR) -name \*~ -exec rm -f "{}" \; ;	\
-		find $(DISTDIR) -name .\#\* -exec rm -f "{}" \; ;	\
-		( cd $(DISTDIR) &&				\
-		  autoheader &&					\
-		  autoconf );					\
-		rm -rf $(DISTDIR)/autom4te.cache;		\
-		touch .state.regen;				\
-	fi
-
-dist: regen
-	if [ \! -f .state.dist ]; then				\
-		ditto $(DISTDIR) $(DISTDIR)-$$(date +%Y%m%d);	\
-		tar jcf $(DISTDIR)-$$(date +%Y%m%d).tar.bz2 	\
-			$(DISTDIR)-$$(date +%Y%m%d);		\
-		touch .state.dist;				\
-	fi

Modified: trunk/README
===================================================================
--- trunk/README	2006-06-09 04:24:17 UTC (rev 138)
+++ trunk/README	2006-09-09 21:19:01 UTC (rev 139)
@@ -3,11 +3,10 @@
 
 The repository is set up to patch an existing tarball, using a
 combination of patch files and copying brand new files.  To generate a
-usable source directory, do the following:
+usable source directory based on a subversion checkout, run "./extract.sh".
 
-% make extract
-% make patch
-% make regen
+The resulting source in "odcctools/" can be distributed and built on
+a variety of platforms and OS versions.
 
 ---
 

Added: trunk/extract.sh
===================================================================
--- trunk/extract.sh	                        (rev 0)
+++ trunk/extract.sh	2006-09-09 21:19:01 UTC (rev 139)
@@ -0,0 +1,149 @@
+#!/bin/sh
+
+set -e
+
+CCTOOLSNAME=cctools
+CCTOOLSVERS=590.42.1
+CCTOOLSDISTFILE=${CCTOOLSNAME}-${CCTOOLSVERS}.tar.bz2
+
+LD64NAME=ld64
+LD64VERS=47.2
+LD64DISTFILE=${LD64NAME}-${LD64VERS}.tar.bz2
+
+DISTDIR=odcctools
+
+TOPSRCDIR=`pwd`
+
+MAKEDISTFILE=0
+UPDATEPATCH=0
+
+while [ $# -gt 0 ]; do
+    case $1 in
+	--distfile)
+	    shift
+	    MAKEDISTFILE=1
+	    ;;
+	--updatepatch)
+	    shift
+	    UPDATEPATCH=1
+	    ;;
+	--help)
+	    echo "Usage: $0 [--help] [--distfile] [--updatepatch]" 1>&2
+	    exit 0
+	    ;;
+	*)
+	    echo "Unknown option $1" 1>&2
+	    exit 1
+    esac
+done
+
+tar --help | grep -- --strip-components > /dev/null 2>&1
+
+if [ $? -eq 0 ]; then
+    TARSTRIP=--strip-components
+else
+    TARSTRIP=--strip-path
+fi
+
+PATCHFILESDIR=${TOPSRCDIR}/patches
+
+PATCHFILES=`cd "${PATCHFILESDIR}" && find * -type f \! -path \*/.svn\*`
+
+ADDEDFILESDIR=${TOPSRCDIR}/files
+
+if [ -d "${DISTDIR}" ]; then
+    echo "${DISTDIR} already exists. Please move aside before running" 1>&2
+    exit 1
+fi
+
+mkdir -p ${DISTDIR}
+tar ${TARSTRIP}=1 -jxf ${CCTOOLSDISTFILE} -C ${DISTDIR}
+mkdir -p ${DISTDIR}/ld64
+tar ${TARSTRIP}=1 -jxf ${LD64DISTFILE} -C ${DISTDIR}/ld64
+find ${DISTDIR}/ld64/doc/ -type f -exec cp "{}" ${DISTDIR}/man \;
+
+# Clean the source a bit
+find ${DISTDIR} -name \*.orig -exec rm -f "{}" \;
+rm -rf ${DISTDIR}/{cbtlibs,dyld,file,gprof,libdyld,mkshlib,profileServer}
+
+SDKROOT=/Developer/SDKs/MacOSX10.4u.sdk
+echo "Merging content from $SDKROOT"
+if [ ! -d "$SDKROOT" ]; then
+    echo "$SDKROOT must be present" 1>&2
+    exit 1
+fi
+mv ${DISTDIR}/include/mach/machine.h ${DISTDIR}/include/mach/machine.h.new;
+for i in mach architecture i386 libkern; do
+    tar cf - -C "$SDKROOT/usr/include" $i | tar xf - -C ${DISTDIR}/include
+done;
+mv ${DISTDIR}/include/mach/machine.h.new ${DISTDIR}/include/mach/machine.h;
+
+# process source for mechanical substitutions
+echo "Removing #import"
+find ${DISTDIR} -type f -name \*.[ch] | while read f; do
+    sed -e 's/^#import/#include/' < $f > $f.tmp
+    mv -f $f.tmp $f
+done
+	
+echo "Removing __private_extern__"
+find ${DISTDIR} -type f -name \*.h | while read f; do
+    sed -e 's/^__private_extern__/extern/' < $f > $f.tmp
+    mv -f $f.tmp $f
+done
+
+for f in ${DISTDIR}/include/libkern/OSByteOrder.h; do
+    sed -e 's/__GNUC__/__GNUC_UNUSED__/g' < $f > $f.tmp
+    mv -f $f.tmp $f
+done
+
+set +e
+
+INTERACTIVE=1
+echo "Applying patches"
+for p in ${PATCHFILES}; do			
+    dir=`dirname $p`
+    if [ $INTERACTIVE -eq 1 ]; then
+	read -p "Apply patch $p? " REPLY
+    else
+	echo "Applying patch $p"
+    fi
+    pushd ${DISTDIR}/$dir > /dev/null
+    patch --backup --posix -p0 < ${PATCHFILESDIR}/$p
+    if [ $? -ne 0 ]; then
+	echo "There was a patch failure. Please manually merge and exit the sub-shell when done"
+	$SHELL
+	if [ $UPDATEPATCH -eq 1 ]; then
+	    find . -type f | while read f; do
+		if [ -f "$f.orig" ]; then
+		    diff -u -N "$f.orig" "$f"
+		fi
+	    done > ${PATCHFILESDIR}/$p
+	fi
+    fi
+    find . -type f -name \*.orig -exec rm -f "{}" \;
+    popd > /dev/null
+done
+
+set -e
+
+echo "Adding new files"
+tar cf - --exclude=CVS --exclude=.svn -C ${ADDEDFILESDIR} . | tar xvf - -C ${DISTDIR}
+
+echo "Deleting cruft"
+find ${DISTDIR} -name Makefile -exec rm -f "{}" \;
+find ${DISTDIR} -name \*~ -exec rm -f "{}" \;
+find ${DISTDIR} -name .\#\* -exec rm -f "{}" \;
+
+pushd ${DISTDIR} > /dev/null
+autoheader
+autoconf
+rm -rf autom4te.cache
+popd > /dev/null
+
+if [ $MAKEDISTFILE -eq 1 ]; then
+    DATE=$(date +%Y%m%d)
+    mv ${DISTDIR} ${DISTDIR}-$DATE
+    tar jcf ${DISTDIR}-$DATE.tar.bz2 ${DISTDIR}-$DATE
+fi
+
+exit 0


Property changes on: trunk/extract.sh
___________________________________________________________________
Name: svn:executable
   + *

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/odcctools-changes/attachments/20060909/82692374/attachment-0001.html


More information about the Odcctools-changes mailing list