Revision: 139 Author: ssen@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 + *
participants (1)
-
source_changes@macosforge.org