diff --git a/ChangeLog b/ChangeLog index d9b2db8..311fcf1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,207 @@ +Changes from 0.2.0 Beta to 0.3.0 Beta +------------------------------------- + +o Xcode 3.0 DocSet Documentation + ------------------------------ + +The DocSet documentation is essentially the HTML documentation with a few +minor tweaks. It is created by the scripts: + +Documentation/Scripts/buildDocSet.sh +Documentation/Scripts/createDocSet.pl + +createDocSet.pl is pretty horrific, and was kludged together very quickly. +It creates the required 'Nodes.xml' and 'Tokens.xml' by extracting the +information from the documentation database and rewrites the anchors in +the html files to use the '//apple_ref/' style format. This is not used +in the normal HTML documentation because it isn't valid HTML (tidy throws +a fit and there's hundreds of warnings generated.) However, the docset +tool chain appears to be much happier with apple_ref style anchors, so the +legal html name anchors are rewritten. + +Once all these pieces are in placed, and a Info.plist is created, the +'docsetutil' command is run to build the DocSet index and that's pretty +much it. + +o Garbage Collection + ------------------ + +Mac OS X 10.5 Garbage Collection is controlled by the C Preprocessor flag +ENABLE_MACOSX_GARBAGE_COLLECTION. A number of macros were created to ease +various portability issues. Of special note is the framework global +variable 'RKRegexGarbageCollect'. If ENABLE_MACOSX_GARBAGE_COLLECTION is +defined, then RKRegexGarbageCollect is a int32_t defined in RKRegex.m. +If ENABLE_MACOSX_GARBAGE_COLLECTION is not defined, then RKRegexGarbageCollect +is #defined in RegexKitPrivate.h as '0'. Also in RegexKitPrivate.h are a +number of macros for managing various Retain/Release/Autorelease. + +If ENABLE_MACOSX_GARBAGE_COLLECTION is defined, then RKRegex.m, RKCache.m, and +NSString.m will all check and see if the class 'NSGarbageCollector' exists, +and if so, check to see if garbage collection is enabled in their +load +methods. + +If ENABLE_MACOSX_GARBAGE_COLLECTION is not defined, then most of the macros +become a compile time static conditional which the compiler will optimize away, +so compiling on pre-10.5 or GNUstep is branchless. It was the best I could +come up with for maximum portability while still maintaining readability. + +In RKCache, if ENABLE_MACOSX_GARBAGE_COLLECTION is defined, AND if GC is +enabled at load time, then the class switches to using the new NSMapTable +class for managing the cache. It places cached RKRegex objects in a NSMapTable +with a weak reference to the object. This should allow for auto trimming +of the cache to the working set. Not sure how it will work out in real life. + +o 64 bit support + -------------- + +A set of macros was adopted to ease multi-platform 64 bit issues. They are +essentially parallel to the Leopard NSInteger / NSUInteger types, except that +they are cpp macros. They have the names RKInteger and RKUInteger / etc. +They are re-written to either NSInteger or int depending on the detected +run time environment. This allows for type checking / compatibility to be +maintained for each environment. GNUstep still has things such as 'hash' +defined as 'unsigned int', and for some of our objects we return the pointer +to the instantiated object as the hash (there can be only one) and this +causes truncation on GNUstep, but it should be OK. + +o GNUstep + ------- + +Cleaned up various GNUstep pieces here and there while putting the 64 bit +stuff in. Should build much cleaner now, with only a handful of warnings +when compiling on a 64 bit platform for various hash functions, but this +shouldn't be a problem in the real world. + + +o RegexKit.framework Info.plist version bug fix + --------------------------------------------- + +The Info.plist in RegexKit 0.2.0 had a bug in the Info.plist file. +The settings for the keys CFBundleShortVersionString and CFBundleVersion +where set to the variable ${REGEXKIT_CURRENT_VERSION} when they should +have been set to ${PROJECT_CURRENT_VERSION}. Since the variable +${REGEXKIT_CURRENT_VERSION} was undefined, this ended up expanding to +nothing, so the correct version number is missing. This should be a +fairly trivial bug in the grand scheme of things. + +o Mac OS X Installer .dmg distribution + ------------------------------------ + +RegexKit 0.3.0 marks the introduction of a Mac OS X Installer based +distribution. It bundles together the Mac OS X Binary executable +RegexKit.framework, the Documentation, and the source code in to one +convenient package. Each is grouped in to their own package, and by +default RegexKit.framework and Documentation are selected to install while +the source code package is not. There's some javascript code to disable +a package if the version that is already installed is newer than the version +that is attempting to install. Also, there's some logic so that the source +code package will automatically default to selected if it detects that +a previous install of the source code has been performed, thus auto upgrading +without having to think about it. + +The Installer has a volume check script that requires 10.4 or later in order +to install on a volume, and an installation check that checks to see if the +file '/Developer/Applications/Xcode.app' exists. If it does not, it presents +a warning that the Xcode Development Tools should be installed, but does not +stop the installation. + +There's three main tuneables in the build configs: + + DISTRIBUTION_GZIP_PACKAGES YES | NO (NO = Default) + DISTRIBUTION_INCLUDE_PCRE_PACKAGE YES | NO (NO = Default) + DISTRIBUTION_DEFAULT_INSTALL_DIR /Developer/Local/RegexKit/ + +Since the overall distribution package gets placed on to a .dmg disk image, +which is then BZip2 compressed (-format UDBZ), compressing the packages with +gzip actually causes the final .dmg size to grow by about ~60-70K, or roughly +10% in size. So, by default, we leave the packages uncompressed and let +the disk image bzip2 deal with all the compression. + +The other option, DISTRIBUTION_INCLUDE_PCRE_PACKAGE, toggles whether or not +the PCRE tarball used to build the framework is included in the Installer +distribution. By default the choice is NO since this causes the final .dmg +disk image to nearly double in size. There's some extra javascript logic so +that the PCRE distribution is if and only if the source code package is +selected to be installed. If the user selects the source code package, +the PCRE package then auto selects itself to be installed as well. The +PCRE package version is the PCRE Major.Minor, not the RegexKit version. +Unlike the others it will allow an earlier version to be installed 'on +top off' a newer version since this is largely harmless- Each PCRE +tarball distribution is separate from the others. + +The file that creates the top level distribution package 'distribution.dist' +file is in 'Source/Build/Scripts/packageDist.pl'. It handles the logic +of selectively inserting the PCRE choice depending on whether or not +DISTRIBUTION_INCLUDE_PCRE_PACKAGE is set to YES. It also gathers some +necessary information, such as a packages installed size, by using perls +objective-c / foundation bridge to read the individual packages Info.plist +files and extracting the appropriate keys. + +For each package (of which there are four, RegexKit.framework binary package, +Documentation package, Source code package, and optionally the PCRE +distribution package) there exists two .plist files, one info.plist and one +desc.plist. The important one is the info.plist, and it contains the +bundle identification and version information. The version information is +replaced dynamically at build time by the +'Source/Build/Scripts/buildDistribution.sh' script. That script makes a +copy of the plists to a private build staging area. Then, it calls the +script 'Source/Build/Scripts/plistUtil.pl' which is a very simply perl script +that again used the objective-c / foundation bridge to take three arguments: +the plist file to operate on, the key to update, and the value to set the +key to. buildDistribution.sh uses this to update all the plists to the +current RegexKit version as required by the package plist format. An +additional .plist file, RegexKit_mpkg.plist, is largely for cosmetic purposes. +It gets the version updated as well, but its sole purpose is to provide a +version string to the finder when a 'Get Info' is performed and that's it. + +The text that's displayed during the installation process comes from four +files, though only two are currently used. These are located in +'Source/Build/Packagemaker/Resources/...', which is a localized .lproj style +directory for localization purposes. Currently only English.lproj is present. +The files are currently simple .rtf files, but .rtfd and .html are supported +as well. Any changes to the file types would have to be updated in the +packageDist.pl file (it should be obvious where). Only 'ReadMe.rtf' and +'License.rtf' are currently used, but both 'Welcome.rtf' and 'Conclusion.rtf' +can be activated trivially by editing packageDist.pl. They get copied in +to the distribution package right now, but the necessary lines in +'distribution.dist' that is created by packageDist.pl are missing. + +The tuneable DISTRIBUTION_DEFAULT_INSTALL_DIR is self-explanatory. + +o Minor bug fixes + --------------- + +There were a handful of very minor, single line changes to fix some trivial +bugs. These mostly had to do with inter-version differences between tools +(ie, sqlite 3.1.3 -> later versions tweaks, minor accommodations to make +building from the installer distribution run clean) + +o Build system tweaks + ------------------- + +Replaced the 'debug: ' portion of various script status lines with 'note: ' +instead. This is mostly cosmetic. In the Makefile.pcre, added the makefile +file name and line number of the message so clicking on it will take you +right to that line. Updated most status messages to always output the +filename and line number with the status indicator. + +The PCRE build target is largely driven by Makefiles. The scripts that invoke +`make` were modified to set the -j argument, or the number of jobs to run +in parallel, and the -l argument, or the load average where no new jobs can +be started. The values for these parameters are derived from the sysctl +variable 'hw.activecpu'. The -j parameter is set to the number of active +CPU's, and the max load is set to the number of active CPU's + 2. This should +allow those of you with multiple CPU's to build the PCRE target faster. +However, sometimes building in parallel causes certain make dependency issues +to crop up that don't happen when running sequentially. + +This can be disabled with the tuneable PCRE_PARALLEL_BUILD = NO. + +The Distribution target was also partially parallel build enabled as well. + + +----------------------------------------------------------------------------- + Changes from Alpha test distribution ------------------------------------ diff --git a/GNUstep/GNUmakefile b/GNUstep/GNUmakefile index 9191674..2528fc4 100644 --- a/GNUstep/GNUmakefile +++ b/GNUstep/GNUmakefile @@ -3,14 +3,22 @@ include $(GNUSTEP_MAKEFILES)/common.make # Assumes that the CWD is GNUstep -REGEXKIT_ROOT_DIR = $(abspath ..) +REGEXKIT_ROOT_DIR = $(abspath ..) -GNUSTEP_BUILD_DIR = ${REGEXKIT_ROOT_DIR}/GNUstep -REGEXKIT_SOURCE_DIR = ${REGEXKIT_ROOT_DIR}/Source -REGEXKIT_HEADERS_DIR = ${REGEXKIT_SOURCE_DIR}/Headers +GNUSTEP_BUILD_DIR = ${REGEXKIT_ROOT_DIR}/GNUstep +REGEXKIT_SOURCE_DIR = ${REGEXKIT_ROOT_DIR}/Source +REGEXKIT_HEADERS_DIR = ${REGEXKIT_SOURCE_DIR}/Headers -PCRE_LIBS=$(shell pcre-config --libs) -PCRE_CFLAGS=$(shell pcre-config --cflags) +PCRE_LIBS = $(shell pcre-config --libs) +PCRE_CFLAGS = $(shell pcre-config --cflags) +PCRE_HEADER = $(shell perl -e '$$x = "${PCRE_CFLAGS}"; $$x =~ /\-I(.*?\/include\b)/; print("$$1/pcre.h");') + +ORIGINAL_RK_PCRE_HEADER = $(shell diff -q '${REGEXKIT_HEADERS_DIR}/RegexKit/pcre.h' '${REGEXKIT_SOURCE_DIR}/Build/Distribution/distribution_pcre.h') + +ifeq (${ORIGINAL_RK_PCRE_HEADER},) +$(info Copying the installed PCRE's '${PCRE_HEADER}' to RegexKit's Headers directory at '${REGEXKIT_HEADERS_DIR}/RegexKit/pcre.h') +$(shell cp '${PCRE_HEADER}' '${REGEXKIT_HEADERS_DIR}/RegexKit/pcre.h') +endif vpath %.m ${REGEXKIT_SOURCE_DIR} vpath %.h ${REGEXKIT_HEADERS_DIR}/RegexKit @@ -29,10 +37,6 @@ libRegexKit_HEADER_FILES_INSTALL_DIR = /RegexKit # Include the PCRE library libRegexKit_LIBRARIES_DEPEND_UPON += $(FND_LIBS) ${PCRE_LIBS} -#${REGEXKIT_HEADERS_DIR}/pcre.h: -# cp -p /usr/local/include/pcre.h '${REGEXKIT_HEADERS_DIR}/${PACKAGE_NAME}/pcre.h' - - include $(GNUSTEP_MAKEFILES)/library.make include $(GNUSTEP_MAKEFILES)/aggregate.make diff --git a/LICENSE b/LICENSE index c47650f..4c74637 100644 --- a/LICENSE +++ b/LICENSE @@ -1,11 +1,11 @@ Important Information --------------------- -RegexKit uses the PCRE library, copyright and written by Philip Hazel, as -its regular expression pattern matching engine. Therefore, RegexKit -requires and incorporates the PCRE library in to the framework executable. -Because of this, you should be aware of the PCRE library licensing -requirements. +RegexKit uses the PCRE library, written by Philip Hazel and +Copyright © 1997-2007 University of Cambridge, as its regular expression +pattern matching engine. Therefore, RegexKit requires and incorporates the +PCRE library in to the framework executable. Because of this, you should be +aware of the PCRE library licensing requirements. Website: http://www.pcre.org/ License: http://www.pcre.org/license.txt diff --git a/README b/README index cd6a8b7..08dafe8 100644 --- a/README +++ b/README @@ -1,2 +1 @@ -GNUstep support was not tested for this release so there may be some -lingering issues. +See the ChangeLog and ReleaseNotes files. diff --git a/RegexKit.xcodeproj/project.pbxproj b/RegexKit.xcodeproj/project.pbxproj index 1c7616a..ed049b9 100644 --- a/RegexKit.xcodeproj/project.pbxproj +++ b/RegexKit.xcodeproj/project.pbxproj @@ -7,6 +7,18 @@ objects = { /* Begin PBXAggregateTarget section */ + 120291B30CD1CC610045B036 /* DocSet */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 120291B70CD1CC610045B036 /* Build configuration list for PBXAggregateTarget "DocSet" */; + buildPhases = ( + 120291B60CD1CC610045B036 /* buildDocSet.sh */, + ); + dependencies = ( + 120291BD0CD1CD4C0045B036 /* PBXTargetDependency */, + ); + name = DocSet; + productName = "Build Documentation"; + }; 1264D5A00C7A59E10044B285 /* Documentation */ = { isa = PBXAggregateTarget; buildConfigurationList = 1264D5C10C7A59F50044B285 /* Build configuration list for PBXAggregateTarget "Documentation" */; @@ -28,6 +40,7 @@ dependencies = ( 1264D6F40C7A7A350044B285 /* PBXTargetDependency */, 1264D94C0C7AC3B00044B285 /* PBXTargetDependency */, + 1261B78E0CD27CE100F2E972 /* PBXTargetDependency */, ); name = Distribution; productName = Distribution; @@ -46,13 +59,13 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 122401EC0CCD5D89006F56F9 /* timing.m in Sources */ = {isa = PBXBuildFile; fileRef = 1264D5700C7A50100044B285 /* timing.m */; }; + 122401ED0CCD5E15006F56F9 /* multithreading.m in Sources */ = {isa = PBXBuildFile; fileRef = 1264D56C0C7A50100044B285 /* multithreading.m */; }; 1264D7880C7A95F80044B285 /* NSDate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1264D5640C7A50100044B285 /* NSDate.m */; }; 1264D7890C7A95F80044B285 /* core.m in Sources */ = {isa = PBXBuildFile; fileRef = 1264D5660C7A50100044B285 /* core.m */; }; 1264D83B0C7A9D7D0044B285 /* collectionAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1264D5680C7A50100044B285 /* collectionAdditions.m */; }; 1264D8560C7A9DF90044B285 /* stringConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = 1264D56E0C7A50100044B285 /* stringConversion.m */; }; 1264D8580C7A9E0F0044B285 /* functionality.m in Sources */ = {isa = PBXBuildFile; fileRef = 1264D56A0C7A50100044B285 /* functionality.m */; }; - 1264D85A0C7A9E1B0044B285 /* multithreading.m in Sources */ = {isa = PBXBuildFile; fileRef = 1264D56C0C7A50100044B285 /* multithreading.m */; }; - 1264D85C0C7A9E300044B285 /* timing.m in Sources */ = {isa = PBXBuildFile; fileRef = 1264D5700C7A50100044B285 /* timing.m */; }; 1264D97B0C7AC50E0044B285 /* Unit Tests-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1264D5710C7A50100044B285 /* Unit Tests-Info.plist */; }; 1299AEAB0C78AE4A007F3859 /* pcre.h in Headers */ = {isa = PBXBuildFile; fileRef = 1299AEAA0C78AE4A007F3859 /* pcre.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12D581810C80B75500674FA2 /* enumeration.m in Sources */ = {isa = PBXBuildFile; fileRef = 12D581800C80B75500674FA2 /* enumeration.m */; }; @@ -87,12 +100,25 @@ 12DB1A260C787E3D00735165 /* RKRegex.m in Sources */ = {isa = PBXBuildFile; fileRef = 12DB1A180C787E3D00735165 /* RKRegex.m */; }; 12DB1A270C787E3D00735165 /* RKUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 12DB1A190C787E3D00735165 /* RKUtility.m */; }; 12DB1A9C0C788DBB00735165 /* RegexKitDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 12DB1A9B0C788DBB00735165 /* RegexKitDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 12F6B3FE0CA69B2F0094EDB5 /* checkSpelling.sh in Resources */ = {isa = PBXBuildFile; fileRef = 12F6B3FD0CA69B2F0094EDB5 /* checkSpelling.sh */; }; 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; 8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 120291BC0CD1CD4C0045B036 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1264D5A00C7A59E10044B285; + remoteInfo = Documentation; + }; + 1261B78D0CD27CE100F2E972 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 120291B30CD1CC610045B036; + remoteInfo = DocSet; + }; 1264D5C80C7A5A720044B285 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; @@ -135,9 +161,15 @@ 0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 089C1667FE841158C02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = Source/Resources/English.lproj/InfoPlist.strings; sourceTree = ""; }; 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - 12222BC60CBB7F98001F0231 /* fileCheck.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; name = fileCheck.pl; path = Source/Build/Scripts/fileCheck.pl; sourceTree = ""; }; - 12222BCC0CBB8077001F0231 /* files.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = files.sql; path = Source/Build/SQL/files.sql; sourceTree = ""; }; - 124BF9DE0CAACEFC00D04C96 /* buildPCRE.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = buildPCRE.sh; path = Source/Build/Scripts/buildPCRE.sh; sourceTree = ""; }; + 120291BE0CD1CDAD0045B036 /* buildDocSet.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = buildDocSet.sh; path = Source/Documentation/Scripts/buildDocSet.sh; sourceTree = ""; }; + 12222BC60CBB7F98001F0231 /* fileCheck.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = fileCheck.pl; sourceTree = ""; }; + 12222BCC0CBB8077001F0231 /* files.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = files.sql; sourceTree = ""; }; + 122400F10CCD4587006F56F9 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = /System/Library/Frameworks/SenTestingKit.framework; sourceTree = ""; }; + 124BF9DE0CAACEFC00D04C96 /* buildPCRE.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = buildPCRE.sh; sourceTree = ""; }; + 1261B6F20CD24E6900F2E972 /* createDocSet.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; name = createDocSet.pl; path = Source/Documentation/Scripts/createDocSet.pl; sourceTree = ""; }; + 1261B7870CD27AF400F2E972 /* DocSet_desc.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = DocSet_desc.plist; sourceTree = ""; }; + 1261B7880CD27AF400F2E972 /* DocSet_info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = DocSet_info.plist; sourceTree = ""; }; + 1261B80D0CD28A7C00F2E972 /* docset.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = docset.sql; path = Source/Documentation/SQL/docset.sql; sourceTree = ""; }; 1264D5050C7A4DCC0044B285 /* config.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = config.sql; path = Source/Documentation/SQL/config.sql; sourceTree = ""; }; 1264D5060C7A4DCC0044B285 /* init.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = init.sql; path = Source/Documentation/SQL/init.sql; sourceTree = ""; }; 1264D5070C7A4DDE0044B285 /* buildDocumentation.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = buildDocumentation.sh; path = Source/Documentation/Scripts/buildDocumentation.sh; sourceTree = ""; }; @@ -164,9 +196,9 @@ 1264D5230C7A4E4E0044B285 /* triangle_open.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = triangle_open.png; path = Source/Documentation/Resources/Images/triangle_open.png; sourceTree = ""; }; 1264D5280C7A4E750044B285 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = common.js; path = Source/Documentation/Resources/JavaScript/common.js; sourceTree = ""; }; 1264D5290C7A4E750044B285 /* toc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = toc.js; path = Source/Documentation/Resources/JavaScript/toc.js; sourceTree = ""; }; - 1264D54F0C7A4F5B0044B285 /* buildDistribution.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = buildDistribution.sh; path = Source/Build/Scripts/buildDistribution.sh; sourceTree = ""; }; - 1264D5530C7A4F5B0044B285 /* stripHeaderdoc.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = stripHeaderdoc.sh; path = Source/Build/Scripts/stripHeaderdoc.sh; sourceTree = ""; }; - 1264D5560C7A4F8A0044B285 /* projectExportedSymbols */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = projectExportedSymbols; path = Source/Build/Xcode/projectExportedSymbols; sourceTree = ""; }; + 1264D54F0C7A4F5B0044B285 /* buildDistribution.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = buildDistribution.sh; sourceTree = ""; }; + 1264D5530C7A4F5B0044B285 /* stripHeaderdoc.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = stripHeaderdoc.sh; sourceTree = ""; }; + 1264D5560C7A4F8A0044B285 /* projectExportedSymbols */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = projectExportedSymbols; sourceTree = ""; }; 1264D5620C7A50100044B285 /* debug.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = debug.sh; path = Source/unitTests/debug.sh; sourceTree = ""; }; 1264D5630C7A50100044B285 /* NSDate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSDate.h; path = Source/unitTests/NSDate.h; sourceTree = ""; }; 1264D5640C7A50100044B285 /* NSDate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSDate.m; path = Source/unitTests/NSDate.m; sourceTree = ""; }; @@ -187,7 +219,8 @@ 1264D68D0C7A67960044B285 /* index.html */ = {isa = PBXFileReference; explicitFileType = text.html; fileEncoding = 4; name = index.html; path = Source/Documentation/Static/index.html; sourceTree = ""; }; 1264D77F0C7A95B60044B285 /* Unit Tests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Unit Tests.octest"; sourceTree = BUILT_PRODUCTS_DIR; }; 1264DC100C7B3BFA0044B285 /* RegexKitImplementationTopics.html */ = {isa = PBXFileReference; explicitFileType = text.html; fileEncoding = 4; name = RegexKitImplementationTopics.html; path = Source/Documentation/Static/RegexKitImplementationTopics.html; sourceTree = ""; }; - 1299AE850C78AC97007F3859 /* Makefile.pcre */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; name = Makefile.pcre; path = Source/Build/Makefiles/Makefile.pcre; sourceTree = ""; }; + 127B94390CC6EF92003E7257 /* Makefile.dist */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.dist; sourceTree = ""; }; + 1299AE850C78AC97007F3859 /* Makefile.pcre */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.pcre; sourceTree = ""; }; 1299AEAA0C78AE4A007F3859 /* pcre.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pcre.h; path = Source/Headers/RegexKit/pcre.h; sourceTree = ""; }; 1299AFAA0C78C14F007F3859 /* Constants.tmpl */ = {isa = PBXFileReference; explicitFileType = text.html; fileEncoding = 4; name = Constants.tmpl; path = Source/Documentation/Templates/Constants.tmpl; sourceTree = ""; }; 1299AFAB0C78C14F007F3859 /* content.tmpl */ = {isa = PBXFileReference; explicitFileType = text.html; fileEncoding = 4; name = content.tmpl; path = Source/Documentation/Templates/content.tmpl; sourceTree = ""; }; @@ -206,9 +239,11 @@ 1299AFB80C78C14F007F3859 /* RKEnumerator.tmpl */ = {isa = PBXFileReference; explicitFileType = text.html; fileEncoding = 4; name = RKEnumerator.tmpl; path = Source/Documentation/Templates/RKEnumerator.tmpl; sourceTree = ""; }; 1299AFB90C78C14F007F3859 /* RKRegex.tmpl */ = {isa = PBXFileReference; explicitFileType = text.html; fileEncoding = 4; name = RKRegex.tmpl; path = Source/Documentation/Templates/RKRegex.tmpl; sourceTree = ""; }; 1299AFBA0C78C14F007F3859 /* toc.tmpl */ = {isa = PBXFileReference; explicitFileType = text.html; fileEncoding = 4; name = toc.tmpl; path = Source/Documentation/Templates/toc.tmpl; sourceTree = ""; }; + 12B8D2D40CC4BBBE00B47ECD /* pcre_desc.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = pcre_desc.plist; sourceTree = ""; }; + 12B8D2D50CC4BBBE00B47ECD /* pcre_info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = pcre_info.plist; sourceTree = ""; }; 12BA3EA20CB86EE300F82B79 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; 12BA3EBA0CB871C200F82B79 /* README.MacOSX */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.MacOSX; sourceTree = ""; }; - 12BD451E0CB5F1E100EBA014 /* distribution_pcre.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = distribution_pcre.h; path = Source/Build/Distribution/distribution_pcre.h; sourceTree = ""; }; + 12BD451E0CB5F1E100EBA014 /* distribution_pcre.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = distribution_pcre.h; sourceTree = ""; }; 12BD45740CB6AA9400EBA014 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 12BD48300CB6CD4B00EBA014 /* ChangeLog */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ChangeLog; sourceTree = ""; }; 12BD49A30CB75A6900EBA014 /* ReleaseNotes */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReleaseNotes; sourceTree = ""; }; @@ -245,13 +280,28 @@ 12DB1A180C787E3D00735165 /* RKRegex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RKRegex.m; path = Source/RKRegex.m; sourceTree = ""; }; 12DB1A190C787E3D00735165 /* RKUtility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RKUtility.m; path = Source/RKUtility.m; sourceTree = ""; }; 12DB1A9B0C788DBB00735165 /* RegexKitDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegexKitDefines.h; path = Source/Headers/RegexKit/RegexKitDefines.h; sourceTree = ""; }; - 12EACB4A0CBC156C00175505 /* GNUmakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = GNUmakefile; path = GNUstep/GNUmakefile; sourceTree = ""; }; + 12EACB4A0CBC156C00175505 /* GNUmakefile */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; name = GNUmakefile; path = GNUstep/GNUmakefile; sourceTree = ""; }; 12EACB4B0CBC156C00175505 /* GNUmakefile.postamble */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = GNUmakefile.postamble; path = GNUstep/GNUmakefile.postamble; sourceTree = ""; }; 12EACB4C0CBC156C00175505 /* README.GNUstep */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README.GNUstep; path = GNUstep/README.GNUstep; sourceTree = ""; }; + 12EB3C8B0CC1610100162FCC /* packageDist.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = packageDist.pl; sourceTree = ""; }; + 12EB3C8C0CC1610100162FCC /* plistUtil.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = plistUtil.pl; sourceTree = ""; }; + 12EB3D5A0CC1707000162FCC /* Documentation_desc.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Documentation_desc.plist; sourceTree = ""; }; + 12EB3D5B0CC1707000162FCC /* Documentation_info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Documentation_info.plist; sourceTree = ""; }; + 12EB3D5C0CC1707000162FCC /* Framework_desc.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Framework_desc.plist; sourceTree = ""; }; + 12EB3D5D0CC1707000162FCC /* Framework_info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Framework_info.plist; sourceTree = ""; }; + 12EB3D5E0CC1707000162FCC /* Sourcecode_desc.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Sourcecode_desc.plist; sourceTree = ""; }; + 12EB3D5F0CC1707000162FCC /* Sourcecode_info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Sourcecode_info.plist; sourceTree = ""; }; + 12EB3D620CC1707000162FCC /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Conclusion.rtf; sourceTree = ""; }; + 12EB3D640CC1707000162FCC /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/License.rtf; sourceTree = ""; }; + 12EB3D660CC1707000162FCC /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Welcome.rtf; sourceTree = ""; }; + 12EB3DAD0CC17AA500162FCC /* RegexKit_mpkg_info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = RegexKit_mpkg_info.plist; sourceTree = ""; }; + 12EB3DCD0CC17DC600162FCC /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/ReadMe.rtf; sourceTree = ""; }; + 12EB3DDA0CC17E2C00162FCC /* Documentation.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Documentation.html; sourceTree = ""; }; + 12EB3DE00CC17F2B00162FCC /* Adding RegexKit to your Project.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "Adding RegexKit to your Project.html"; sourceTree = ""; }; 12F6B3FD0CA69B2F0094EDB5 /* checkSpelling.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = checkSpelling.sh; path = Source/Documentation/Scripts/checkSpelling.sh; sourceTree = ""; }; 12F6B43F0CA6A5CF0094EDB5 /* spelling_words */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = spelling_words; path = Source/Documentation/Misc/spelling_words; sourceTree = ""; }; 12F6B5300CA6B6680094EDB5 /* checkHTML.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = checkHTML.sh; path = Source/Documentation/Scripts/checkHTML.sh; sourceTree = ""; }; - 12F901140CA99AAF00CEA3D0 /* RegexKit Build Settings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "RegexKit Build Settings.xcconfig"; path = "Source/Build/Xcode/RegexKit Build Settings.xcconfig"; sourceTree = ""; }; + 12F901140CA99AAF00CEA3D0 /* RegexKit Build Settings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "RegexKit Build Settings.xcconfig"; sourceTree = ""; }; 32DBCF5E0370ADEE00C91783 /* RegexKit_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegexKit_Prefix.pch; path = Source/RegexKit_Prefix.pch; sourceTree = ""; }; 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = Info.plist; path = Source/Info.plist; sourceTree = ""; }; 8DC2EF5B0486A6940098B216 /* RegexKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RegexKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -327,6 +377,7 @@ 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( + 122400F10CCD4587006F56F9 /* SenTestingKit.framework */, 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */, ); name = "Linked Frameworks"; @@ -370,9 +421,11 @@ 1264D5010C7A4DA00044B285 /* Scripts */ = { isa = PBXGroup; children = ( + 120291BE0CD1CDAD0045B036 /* buildDocSet.sh */, 1264D5070C7A4DDE0044B285 /* buildDocumentation.sh */, 12F6B5300CA6B6680094EDB5 /* checkHTML.sh */, 12F6B3FD0CA69B2F0094EDB5 /* checkSpelling.sh */, + 1261B6F20CD24E6900F2E972 /* createDocSet.pl */, 1264D5080C7A4DDE0044B285 /* generateHTML.pl */, 1264D5090C7A4DDE0044B285 /* generatePCREToC.pl */, 1264D50A0C7A4DDE0044B285 /* parseHeaders.pl */, @@ -384,6 +437,7 @@ 1264D5040C7A4DB00044B285 /* SQL */ = { isa = PBXGroup; children = ( + 1261B80D0CD28A7C00F2E972 /* docset.sql */, 1264D5050C7A4DCC0044B285 /* config.sql */, 1264D5060C7A4DCC0044B285 /* init.sql */, ); @@ -443,9 +497,12 @@ 1264D5380C7A4EF80044B285 /* Distribution */ = { isa = PBXGroup; children = ( + 12EB3DE00CC17F2B00162FCC /* Adding RegexKit to your Project.html */, 12BD451E0CB5F1E100EBA014 /* distribution_pcre.h */, + 12EB3DDA0CC17E2C00162FCC /* Documentation.html */, ); name = Distribution; + path = Source/Build/Distribution; sourceTree = ""; }; 1264D53B0C7A4F050044B285 /* SQL */ = { @@ -454,6 +511,7 @@ 12222BCC0CBB8077001F0231 /* files.sql */, ); name = SQL; + path = Source/Build/SQL; sourceTree = ""; }; 1264D54B0C7A4F130044B285 /* Scripts */ = { @@ -462,9 +520,12 @@ 1264D54F0C7A4F5B0044B285 /* buildDistribution.sh */, 124BF9DE0CAACEFC00D04C96 /* buildPCRE.sh */, 12222BC60CBB7F98001F0231 /* fileCheck.pl */, + 12EB3C8B0CC1610100162FCC /* packageDist.pl */, + 12EB3C8C0CC1610100162FCC /* plistUtil.pl */, 1264D5530C7A4F5B0044B285 /* stripHeaderdoc.sh */, ); name = Scripts; + path = Source/Build/Scripts; sourceTree = ""; }; 1264D54C0C7A4F1B0044B285 /* Xcode */ = { @@ -474,6 +535,7 @@ 12F901140CA99AAF00CEA3D0 /* RegexKit Build Settings.xcconfig */, ); name = Xcode; + path = Source/Build/Xcode; sourceTree = ""; }; 1264D5610C7A4FDE0044B285 /* Unit Tests */ = { @@ -532,6 +594,7 @@ children = ( 1264D5380C7A4EF80044B285 /* Distribution */, 1299AE840C78AC7A007F3859 /* Makefiles */, + 12EB3D300CC16F3B00162FCC /* Packagemaker */, 1264D54B0C7A4F130044B285 /* Scripts */, 1264D53B0C7A4F050044B285 /* SQL */, 1264D54C0C7A4F1B0044B285 /* Xcode */, @@ -542,9 +605,11 @@ 1299AE840C78AC7A007F3859 /* Makefiles */ = { isa = PBXGroup; children = ( + 127B94390CC6EF92003E7257 /* Makefile.dist */, 1299AE850C78AC97007F3859 /* Makefile.pcre */, ); name = Makefiles; + path = Source/Build/Makefiles; sourceTree = ""; }; 1299AFA80C78C118007F3859 /* Documentation */ = { @@ -588,8 +653,8 @@ isa = PBXGroup; children = ( 089C1665FE841158C02AAC07 /* Resources */, - 124BFAD60CAAEBF800D04C96 /* Foundation Extensions */, 12DB19EB0C787DF400735165 /* Headers */, + 124BFAD60CAAEBF800D04C96 /* Foundation Extensions */, 12DB1A110C787E3D00735165 /* RKAutoreleasedMemory.m */, 12DB1A120C787E3D00735165 /* RKCache.m */, 12DB1A130C787E3D00735165 /* RKCoder.m */, @@ -649,6 +714,45 @@ name = GNUstep; sourceTree = ""; }; + 12EB3D300CC16F3B00162FCC /* Packagemaker */ = { + isa = PBXGroup; + children = ( + 12EB3D590CC1707000162FCC /* plists */, + 12EB3D600CC1707000162FCC /* Resources */, + ); + name = Packagemaker; + path = Source/Build/Packagemaker; + sourceTree = ""; + }; + 12EB3D590CC1707000162FCC /* plists */ = { + isa = PBXGroup; + children = ( + 1261B7870CD27AF400F2E972 /* DocSet_desc.plist */, + 1261B7880CD27AF400F2E972 /* DocSet_info.plist */, + 12EB3D5A0CC1707000162FCC /* Documentation_desc.plist */, + 12EB3D5B0CC1707000162FCC /* Documentation_info.plist */, + 12EB3D5C0CC1707000162FCC /* Framework_desc.plist */, + 12EB3D5D0CC1707000162FCC /* Framework_info.plist */, + 12EB3DAD0CC17AA500162FCC /* RegexKit_mpkg_info.plist */, + 12EB3D5E0CC1707000162FCC /* Sourcecode_desc.plist */, + 12EB3D5F0CC1707000162FCC /* Sourcecode_info.plist */, + 12B8D2D40CC4BBBE00B47ECD /* pcre_desc.plist */, + 12B8D2D50CC4BBBE00B47ECD /* pcre_info.plist */, + ); + path = plists; + sourceTree = ""; + }; + 12EB3D600CC1707000162FCC /* Resources */ = { + isa = PBXGroup; + children = ( + 12EB3D610CC1707000162FCC /* Conclusion.rtf */, + 12EB3D630CC1707000162FCC /* License.rtf */, + 12EB3DCC0CC17DC600162FCC /* ReadMe.rtf */, + 12EB3D650CC1707000162FCC /* Welcome.rtf */, + ); + path = Resources; + sourceTree = ""; + }; 12F6B43C0CA6A5730094EDB5 /* Misc */ = { isa = PBXGroup; children = ( @@ -741,15 +845,21 @@ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = NO; + }; buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "RegexKit" */; + compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* RegexKit */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; projectDirPath = ""; + projectRoot = ""; targets = ( 8DC2EF4F0486A6940098B216 /* RegexKit Framework */, 1299AE6A0C78AB9C007F3859 /* PCRE */, 1264D5A00C7A59E10044B285 /* Documentation */, + 120291B30CD1CC610045B036 /* DocSet */, 1264D6E40C7A79960044B285 /* Distribution */, 1264D77E0C7A95B60044B285 /* Unit Tests */, ); @@ -762,7 +872,6 @@ buildActionMask = 2147483647; files = ( 1264D97B0C7AC50E0044B285 /* Unit Tests-Info.plist in Resources */, - 12F6B3FE0CA69B2F0094EDB5 /* checkSpelling.sh in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -777,6 +886,20 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 120291B60CD1CC610045B036 /* buildDocSet.sh */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = buildDocSet.sh; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#\n# The source to this script can be found at:\n# Right click on Targets > Documentation > buildDocSet.sh and choose Get Info\n#\n\nSHELL=${SHELL:?\"Environment variable SHELL must exist, aborting\"}\nBUILD_DOCUMENTATION_SCRIPT=${BUILD_DOCSET_SCRIPT:?\"Environment variable BUILD_DOCSET_SCRIPT must exist, aborting\"}\n\nif [ ! -x \"${BUILD_DOCSET_SCRIPT}\" ]; then\n if [ -r \"${BUILD_DOCSET_SCRIPT}\" ] && [ ! -x \"${BUILD_DOCSET_SCRIPT}\" ]; then\n echo \"$0:$LINENO: error: The command to build the DocSet, '${BUILD_DOCSET_SCRIPT}', exists but is not executable, aborting.\"\n echo \"$0:$LINENO: error: Suggestion: 'chmod u+x ${BUILD_DOCSET_SCRIPT}'\"\n exit 1\n fi\n echo \"$0:$LINENO: error: The command to build the DocSet, '${BUILD_DOCSET_SCRIPT}', does not exist, aborting.\";\n exit 1\nelse\n exec \"${SHELL}\" \"${BUILD_DOCSET_SCRIPT}\"\nfi\n"; + }; 1264D5950C7A58A20044B285 /* stripHeaderdoc.sh */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -789,7 +912,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "SHELL=${SHELL:?\"Environment variable SHELL must exist, aborting\"}\nSTRIP_HEADERDOC_SCRIPT=${STRIP_HEADERDOC_SCRIPT:?\"Environment variable STRIP_HEADERDOC_SCRIPT must exist, aborting\"}\n\nif [ ! -x ${STRIP_HEADERDOC_SCRIPT} ]; then\n echo \"$0:$LINENO: error: The command to strip headerdoc comments, '${STRIP_HEADERDOC_SCRIPT}', does not exist, aborting\"\n exit 1\nelse\n exec ${SHELL} ${STRIP_HEADERDOC_SCRIPT}\nfi\n"; + shellScript = "#\n# The source to this script can be found at:\n# Right click on Targets > RegexKit Framework > stripHeaderdoc.sh and choose Get Info\n#\n\nSHELL=${SHELL:?\"Environment variable SHELL must exist, aborting\"}\nSTRIP_HEADERDOC_SCRIPT=${STRIP_HEADERDOC_SCRIPT:?\"Environment variable STRIP_HEADERDOC_SCRIPT must exist, aborting\"}\n\nif [ ! -x \"${STRIP_HEADERDOC_SCRIPT}\" ]; then\n if [ -r \"${STRIP_HEADERDOC_SCRIPT}\" ] && [ ! -x \"${STRIP_HEADERDOC_SCRIPT}\" ]; then\n echo \"$0:$LINENO: error: The command to strip headerdoc comments, '${STRIP_HEADERDOC_SCRIPT}', exists but is not executable, aborting.\"\n echo \"$0:$LINENO: error: Suggestion: 'chmod u+x ${STRIP_HEADERDOC_SCRIPT}'\"\n exit 1\n fi\n echo \"$0:$LINENO: error: The command to strip headerdoc comments, '${STRIP_HEADERDOC_SCRIPT}', does not exist, aborting.\";\n exit 1\nelse\n exec \"${SHELL}\" \"${STRIP_HEADERDOC_SCRIPT}\"\nfi\n"; }; 1264D5A30C7A59F20044B285 /* buildDocumentation.sh */ = { isa = PBXShellScriptBuildPhase; @@ -803,7 +926,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "SHELL=${SHELL:?\"Environment variable SHELL must exist, aborting\"}\nBUILD_DOCUMENTATION_SCRIPT=${BUILD_DOCUMENTATION_SCRIPT:?\"Environment variable BUILD_DOCUMENTATION_SCRIPT must exist, aborting\"}\n\nif [ ! -x ${BUILD_DOCUMENTATION_SCRIPT} ]; then\n echo \"$0:$LINENO: error: The command to build the documentation, '${BUILD_DOCUMENTATION_SCRIPT}', does not exist, aborting\"\n exit 1\nelse\n exec ${SHELL} ${BUILD_DOCUMENTATION_SCRIPT}\nfi\n"; + shellScript = "#\n# The source to this script can be found at:\n# Right click on Targets > Documentation > buildDocumentation.sh and choose Get Info\n#\n\nSHELL=${SHELL:?\"Environment variable SHELL must exist, aborting\"}\nBUILD_DOCUMENTATION_SCRIPT=${BUILD_DOCUMENTATION_SCRIPT:?\"Environment variable BUILD_DOCUMENTATION_SCRIPT must exist, aborting\"}\n\nif [ ! -x \"${BUILD_DOCUMENTATION_SCRIPT}\" ]; then\n if [ -r \"${BUILD_DOCUMENTATION_SCRIPT}\" ] && [ ! -x \"${BUILD_DOCUMENTATION_SCRIPT}\" ]; then\n echo \"$0:$LINENO: error: The command to build the documentation, '${BUILD_DOCUMENTATION_SCRIPT}', exists but is not executable, aborting.\"\n echo \"$0:$LINENO: error: Suggestion: 'chmod u+x ${BUILD_DOCUMENTATION_SCRIPT}'\"\n exit 1\n fi\n echo \"$0:$LINENO: error: The command to build the documentation, '${BUILD_DOCUMENTATION_SCRIPT}', does not exist, aborting.\";\n exit 1\nelse\n exec \"${SHELL}\" \"${BUILD_DOCUMENTATION_SCRIPT}\"\nfi\n"; }; 1264D6E70C7A79A70044B285 /* buildDistribution.sh */ = { isa = PBXShellScriptBuildPhase; @@ -817,7 +940,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "SHELL=${SHELL:?\"Environment variable SHELL must exist, aborting.\"}\nBUILD_DISTRIBUTION_SCRIPT=${BUILD_DISTRIBUTION_SCRIPT:?\"Environment variable BUILD_DISTRIBUTION_SCRIPT must exist, aborting.\"}\n\nif [ ! -x ${BUILD_DISTRIBUTION_SCRIPT} ]; then\n echo \"$0:$LINENO: error: The command to build the distribution, '${BUILD_DISTRIBUTION_SCRIPT}', does not exist, aborting.\"\n exit 1\nelse\n exec ${SHELL} ${BUILD_DISTRIBUTION_SCRIPT}\nfi\n"; + shellScript = "#\n# The source to this script can be found at:\n# Right click on Targets > Distribution > buildDistribution.sh and choose Get Info\n#\n\nSHELL=${SHELL:?\"Environment variable SHELL must exist, aborting.\"}\nBUILD_DISTRIBUTION_SCRIPT=${BUILD_DISTRIBUTION_SCRIPT:?\"Environment variable BUILD_DISTRIBUTION_SCRIPT must exist, aborting.\"}\n\nif [ ! -x \"${BUILD_DISTRIBUTION_SCRIPT}\" ]; then\n if [ -r \"${BUILD_DISTRIBUTION_SCRIPT}\" ] && [ ! -x \"${BUILD_DISTRIBUTION_SCRIPT}\" ]; then\n echo \"$0:$LINENO: error: The command to build the distribution, '${BUILD_DISTRIBUTION_SCRIPT}', exists but is not executable, aborting.\"\n echo \"$0:$LINENO: error: Suggestion: 'chmod u+x ${BUILD_DISTRIBUTION_SCRIPT}'\"\n exit 1\n fi\n echo \"$0:$LINENO: error: The command to build the distribution, '${BUILD_DISTRIBUTION_SCRIPT}', does not exist, aborting.\";\n exit 1\nelse\n exec \"${SHELL}\" \"${BUILD_DISTRIBUTION_SCRIPT}\"\nfi\n"; }; 1264D77D0C7A95B60044B285 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -830,7 +953,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Run the unit tests in this test bundle.\nif [ -x \"Source/unitTests/debug.sh\" ]; then\n source \"Source/unitTests/debug.sh\"\nfi\n\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; + shellScript = "#\n# The source to this script can be found at:\n# Right click on Targets > Unit Tests > Run Script and choose Get Info\n#\n\n# Run the unit tests in this test bundle.\nif [ -x \"Source/unitTests/debug.sh\" ]; then\n source \"Source/unitTests/debug.sh\"\nfi\n\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; }; 1299AE690C78AB9C007F3859 /* buildPCRE.sh */ = { isa = PBXShellScriptBuildPhase; @@ -844,7 +967,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "SHELL=${SHELL:?\"Environment variable SHELL must exist, aborting.\"}\nPCRE_BUILD_SCRIPT=${PCRE_BUILD_SCRIPT:?\"Environment variable PCRE_BUILD_SCRIPT must exist, aborting.\"}\n\nif [ ! -x ${PCRE_BUILD_SCRIPT} ]; then\n echo \"$0:$LINENO: error: The command to build the distribution, '${PCRE_BUILD_SCRIPT}', does not exist, aborting.\"\n exit 1\nelse\n exec ${SHELL} ${PCRE_BUILD_SCRIPT}\nfi\n"; + shellScript = "#\n# The source to this script can be found at:\n# Right click on Targets > PCRE > buildPCRE.sh and choose Get Info\n#\n\nSHELL=${SHELL:?\"Environment variable SHELL must exist, aborting.\"}\nPCRE_BUILD_SCRIPT=${PCRE_BUILD_SCRIPT:?\"Environment variable PCRE_BUILD_SCRIPT must exist, aborting.\"}\n\nif [ ! -x \"${PCRE_BUILD_SCRIPT}\" ]; then\n if [ -r \"${PCRE_BUILD_SCRIPT}\" ] && [ ! -x \"${PCRE_BUILD_SCRIPT}\" ]; then\n echo \"$0:$LINENO: error: The command to build the PCRE library, '${PCRE_BUILD_SCRIPT}', exists but is not executable, aborting.\"\n echo \"$0:$LINENO: error: Suggestion: 'chmod u+x ${PCRE_BUILD_SCRIPT}'\"\n exit 1\n fi\n echo \"$0:$LINENO: error: The command to build the PCRE library, '${PCRE_BUILD_SCRIPT}', does not exist, aborting.\";\n exit 1\nelse\n exec \"${SHELL}\" \"${PCRE_BUILD_SCRIPT}\"\nfi\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -858,8 +981,8 @@ 1264D83B0C7A9D7D0044B285 /* collectionAdditions.m in Sources */, 1264D8580C7A9E0F0044B285 /* functionality.m in Sources */, 1264D8560C7A9DF90044B285 /* stringConversion.m in Sources */, - 1264D85A0C7A9E1B0044B285 /* multithreading.m in Sources */, - 1264D85C0C7A9E300044B285 /* timing.m in Sources */, + 122401EC0CCD5D89006F56F9 /* timing.m in Sources */, + 122401ED0CCD5E15006F56F9 /* multithreading.m in Sources */, 12D581810C80B75500674FA2 /* enumeration.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -888,6 +1011,16 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 120291BD0CD1CD4C0045B036 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1264D5A00C7A59E10044B285 /* Documentation */; + targetProxy = 120291BC0CD1CD4C0045B036 /* PBXContainerItemProxy */; + }; + 1261B78E0CD27CE100F2E972 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 120291B30CD1CC610045B036 /* DocSet */; + targetProxy = 1261B78D0CD27CE100F2E972 /* PBXContainerItemProxy */; + }; 1264D5C90C7A5A720044B285 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 1299AE6A0C78AB9C007F3859 /* PCRE */; @@ -924,9 +1057,55 @@ name = InfoPlist.strings; sourceTree = ""; }; + 12EB3D610CC1707000162FCC /* Conclusion.rtf */ = { + isa = PBXVariantGroup; + children = ( + 12EB3D620CC1707000162FCC /* English */, + ); + name = Conclusion.rtf; + sourceTree = ""; + }; + 12EB3D630CC1707000162FCC /* License.rtf */ = { + isa = PBXVariantGroup; + children = ( + 12EB3D640CC1707000162FCC /* English */, + ); + name = License.rtf; + sourceTree = ""; + }; + 12EB3D650CC1707000162FCC /* Welcome.rtf */ = { + isa = PBXVariantGroup; + children = ( + 12EB3D660CC1707000162FCC /* English */, + ); + name = Welcome.rtf; + sourceTree = ""; + }; + 12EB3DCC0CC17DC600162FCC /* ReadMe.rtf */ = { + isa = PBXVariantGroup; + children = ( + 12EB3DCD0CC17DC600162FCC /* English */, + ); + name = ReadMe.rtf; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 120291B80CD1CC610045B036 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "Build Documentation"; + }; + name = Debug; + }; + 120291B90CD1CC610045B036 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "Build Documentation"; + }; + name = Release; + }; 1264D5C20C7A59F50044B285 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -958,7 +1137,11 @@ 1264D7820C7A95B70044B285 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - FRAMEWORK_SEARCH_PATHS = "${BUILD_DIR}/${CONFIGURATION}"; + FRAMEWORK_SEARCH_PATHS = ( + "${BUILD_DIR}/${CONFIGURATION}", + "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", + ); + GCC_ENABLE_OBJC_GC = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; INFOPLIST_FILE = "Source/unitTests/Unit Tests-Info.plist"; INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; @@ -984,8 +1167,11 @@ 1264D7830C7A95B70044B285 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "${NATIVE_ARCH}"; - FRAMEWORK_SEARCH_PATHS = "${BUILD_DIR}/${CONFIGURATION}"; + FRAMEWORK_SEARCH_PATHS = ( + "${BUILD_DIR}/${CONFIGURATION}", + "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", + ); + GCC_ENABLE_OBJC_GC = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; INFOPLIST_FILE = "Source/unitTests/Unit Tests-Info.plist"; INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; @@ -1029,6 +1215,7 @@ DYLIB_CURRENT_VERSION = "${PROJECT_CURRENT_VERSION}"; EXPORTED_SYMBOLS_FILE = "${PROJECT_EXPORTED_SYMBOLS_FILE}"; FRAMEWORK_VERSION = A; + GCC_ENABLE_OBJC_GC = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", "${PROJECT_HEADERS_ROOT}", @@ -1058,6 +1245,7 @@ DYLIB_CURRENT_VERSION = "${PROJECT_CURRENT_VERSION}"; EXPORTED_SYMBOLS_FILE = "${PROJECT_EXPORTED_SYMBOLS_FILE}"; FRAMEWORK_VERSION = A; + GCC_ENABLE_OBJC_GC = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", NS_BLOCK_ASSERTIONS, @@ -1086,7 +1274,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 12F901140CA99AAF00CEA3D0 /* RegexKit Build Settings.xcconfig */; buildSettings = { - ARCHS = "${NATIVE_ARCH}"; GCC_OPTIMIZATION_LEVEL = 0; WARNING_CFLAGS = ( "$(inherited)", @@ -1103,6 +1290,7 @@ "-Wdiv-by-zero", "-Wmissing-field-initializers", "-Wno-format-nonliteral", + "-Wshorten-64-to-32", ); }; name = Debug; @@ -1111,10 +1299,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 12F901140CA99AAF00CEA3D0 /* RegexKit Build Settings.xcconfig */; buildSettings = { - ARCHS = ( - ppc, - i386, - ); GCC_WARN_UNINITIALIZED_AUTOS = YES; STRIP_INSTALLED_PRODUCT = YES; WARNING_CFLAGS = ( @@ -1132,6 +1316,7 @@ "-Wdiv-by-zero", "-Wmissing-field-initializers", "-Wno-format-nonliteral", + "-Wshorten-64-to-32", ); }; name = Release; @@ -1139,6 +1324,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 120291B70CD1CC610045B036 /* Build configuration list for PBXAggregateTarget "DocSet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 120291B80CD1CC610045B036 /* Debug */, + 120291B90CD1CC610045B036 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; 1264D5C10C7A59F50044B285 /* Build configuration list for PBXAggregateTarget "Documentation" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/ReleaseNotes b/ReleaseNotes index b5ffc43..c70c273 100644 --- a/ReleaseNotes +++ b/ReleaseNotes @@ -1,3 +1,77 @@ +Release Notes for 0.3.0 BETA +---------------------------- + +o Xcode 3.0 DocSet Documentation + ------------------------------ + +The documentation is now made available in the new Xcode 3.0 DocSet format. +This allows you to access the RegexKit documentation from within Xcode. +If you open the Research Assistant ( Help > Show Research Assistant ), and +then place the insert point over a RegexKit method, the Research Assistant +will display the relevent section of documentation. Also available is +full text searching of the documentation from the documentation viewer. +Although the Subscribe button is present, there is no subscription available +at this time (this seems to be a bug with Xcode, no URL is present to even +subscribe to.) Automatic documentation updating will be added in a later +release. + +o Garbage Collection support + -------------------------- + +RegexKit now includes support for Mac OS X 10.5's Garbage Collection feature. +Cocoa's Garbage Collection system requires that all linked files have +Garbage Collection enabled for Garbage Collection to be active. RegexKit +supports both the new Garbage Collection system and the older retain / release +system. At load time, if Cocoa has enabled the GC system, RegexKit switches +to using that. Otherwise, it falls back to the older retain / release way +of managing memory automatically. + +o 64-bit support + -------------- + +RegexKit now supports 64-bits cleanly. For Mac OS X users, the framework +binary now includes the following architectures: + + Architecture Minimum Mac OS X + ppc 10.4 + i386 10.4 + ppc64 10.5 (Leopard) + x86_64 10.5 (Leopard) + +o Mac OS X Installer .dmg distribution + ------------------------------------ + +RegexKit 0.3.0 marks the introduction of a Mac OS X Installer based +distribution. It bundles together the Mac OS X Binary executable +RegexKit.framework, the Documentation, and the source code in to one +convenient package. + +o Build system improvements + ------------------------- + +Began to enable parallel building where possible. For now, the PCRE target +and part of the Distribution target are converted. The global build +configuration flag PARALLEL_BUILD controls this feature. The PCRE target +can be selectively disabled with PCRE_PARALLEL_BUILD = NO, and the Distribution +target can be selectively disabled with DISTRIBUTION_PARALLEL_BUILD = NO. + +By default it will spawn as many jobs as there are CPU's. + +o RegexKit.framework Info.plist version bug fix + --------------------------------------------- + +The Info.plist in RegexKit 0.2.0 had a bug in the Info.plist file. +The settings for the keys CFBundleShortVersionString and CFBundleVersion +where set to the variable ${REGEXKIT_CURRENT_VERSION} when they should +have been set to ${PROJECT_CURRENT_VERSION}. + +o Multi-threading memory leak + --------------------------- + +Fixed a very minor memory leak. Forgot to free() the per-thread local storage +struct when a thread exited. + +---------------------------- Release Notes for 0.2.0 BETA ---------------------------- diff --git a/Source/Build/Distribution/Adding RegexKit to your Project.html b/Source/Build/Distribution/Adding RegexKit to your Project.html new file mode 100644 index 0000000..0e6acf4 --- /dev/null +++ b/Source/Build/Distribution/Adding RegexKit to your Project.html @@ -0,0 +1,10 @@ + + + + + +RegexKit Documentation + + +

Click here if not automatically redirected.

+ diff --git a/Source/Build/Distribution/Documentation.html b/Source/Build/Distribution/Documentation.html index 140508b..b25766c 100644 --- a/Source/Build/Distribution/Documentation.html +++ b/Source/Build/Distribution/Documentation.html @@ -6,5 +6,5 @@ RegexKit Documentation -

Click here if not automatically redirected.

+

Click here if not automatically redirected.

diff --git a/Source/Build/Distribution/distribution_pcre.h b/Source/Build/Distribution/distribution_pcre.h index d084f1d..96a31c3 100644 --- a/Source/Build/Distribution/distribution_pcre.h +++ b/Source/Build/Distribution/distribution_pcre.h @@ -7,4 +7,4 @@ is made. */ -#error RegexKit requires a copy of the PCRE distributions header file. \ No newline at end of file +#error RegexKit requires a copy of the PCRE distributions header file. diff --git a/Source/Build/Makefiles/Makefile.dist b/Source/Build/Makefiles/Makefile.dist new file mode 100644 index 0000000..721d241 --- /dev/null +++ b/Source/Build/Makefiles/Makefile.dist @@ -0,0 +1,141 @@ + +.PHONY: all build clean distclean \ + build_tarballs \ + bin_stage bin_stage_fw bin_stage_doc bin_stage_misc build_bin_tarballs \ + src_stage src_stage_fw src_stage_doc src_stage_misc build_src_tarballs + +DISTRIBUTION_BINARY_DIRECTORIES = ${DISTRIBUTION_TEMP_BINARY_DIR} ${DISTRIBUTION_TEMP_BINARY_ROOT} +DISTRIBUTION_SOURCE_DIRECTORIES = ${DISTRIBUTION_TEMP_SOURCE_DIR} ${DISTRIBUTION_TEMP_SOURCE_ROOT} + +DISTRIBUTION_DIRECTORIES = ${DISTRIBUTION_TARGET_DIR} ${DISTRIBUTION_BINARY_DIRECTORIES} ${DISTRIBUTION_SOURCE_DIRECTORIES} + +build_tarballs: build_bin_tarballs build_src_tarballs + +build: all + +all: + @echo "${MAKEFILE_DIST}:17: error: A valid target must be specified." + +clean: + @echo "${MAKEFILE_DIST}:20: error: Cleaning distribution not supported."; + +distclean: clean + +${DISTRIBUTION_DIRECTORIES}: + @mkdir -p '$@' + + +########### +# +# Binary distribution bits +# + +build_bin_tarballs: ${DISTRIBUTION_TARGET_DIR} ${DISTRIBUTION_TARGET_DIR}/${DISTRIBUTION_ROOT_NAME}.tar.bz2 ${DISTRIBUTION_TARGET_DIR}/${DISTRIBUTION_ROOT_NAME}.tar.gz + +${DISTRIBUTION_TARGET_DIR}/${DISTRIBUTION_ROOT_NAME}.tar.bz2: ${DISTRIBUTION_TEMP_BINARY_DIR}/${DISTRIBUTION_ROOT_NAME}.tar.bz2 + @'${RSYNC}' -aC '$<' '$@' + +${DISTRIBUTION_TARGET_DIR}/${DISTRIBUTION_ROOT_NAME}.tar.gz: ${DISTRIBUTION_TEMP_BINARY_DIR}/${DISTRIBUTION_ROOT_NAME}.tar.gz + @'${RSYNC}' -aC '$<' '$@' + +${DISTRIBUTION_TEMP_BINARY_DIR}/${DISTRIBUTION_ROOT_NAME}.tar.bz2: ${DISTRIBUTION_TEMP_BINARY_DIR}/${DISTRIBUTION_ROOT_NAME}.tar + @echo "${MAKEFILE_DIST}:42: note: Creating binary .bz2 tarball."; \ + '${BZIP2_CMD}' -c9 '$<' > '$@' + +${DISTRIBUTION_TEMP_BINARY_DIR}/${DISTRIBUTION_ROOT_NAME}.tar.gz: ${DISTRIBUTION_TEMP_BINARY_DIR}/${DISTRIBUTION_ROOT_NAME}.tar + @echo "${MAKEFILE_DIST}:46: note: Creating binary .gz tarball."; \ + '${GZIP_CMD}' -c9 '$<' > '$@' + +${DISTRIBUTION_TEMP_BINARY_DIR}/${DISTRIBUTION_ROOT_NAME}.tar: bin_stage + @if [ -r '${DISTRIBUTION_TEMP_BINARY_DIR}/bin_stage.tar' ]; then \ + REBUILD_TAR=`diff -q '${DISTRIBUTION_TEMP_BINARY_DIR}/bin_stage.tar' '${DISTRIBUTION_TEMP_BINARY_DIR}/bin_stage.find'`; \ + if [ "$${REBUILD_TAR}" == "" ]; then exit 0; fi; \ + fi; \ + cd '${DISTRIBUTION_TEMP_BINARY_DIR}'; \ + '${TAR}' cf '$@' '${DISTRIBUTION_ROOT_NAME}'; \ + '${FIND}' '${DISTRIBUTION_TEMP_BINARY_ROOT}' -ls > '${DISTRIBUTION_TEMP_BINARY_DIR}/bin_stage.tar' + +bin_stage: bin_stage_fw bin_stage_doc bin_stage_misc + @'${FILE_CHECK_SCRIPT}' '${DISTRIBUTION_SQL_DATABASE_FILE}' 'Binary' '${DISTRIBUTION_TEMP_BINARY_ROOT}' && \ + '${FIND}' '${DISTRIBUTION_TEMP_BINARY_ROOT}' -ls > '${DISTRIBUTION_TEMP_BINARY_DIR}/bin_stage.find' + +bin_stage_fw: ${DISTRIBUTION_TEMP_BINARY_ROOT} + @'${RSYNC}' -rltgoD --delete --cvs-exclude '${BUILD_DIR}/${CONFIGURATION}/RegexKit.framework' '$<'; \ + '${CHMOD}' -R g-w '$ '$@' + +${DISTRIBUTION_TEMP_SOURCE_DIR}/${DISTRIBUTION_BASE_SOURCE_FILE_NAME}.tar.gz: ${DISTRIBUTION_TEMP_SOURCE_DIR}/${DISTRIBUTION_BASE_SOURCE_FILE_NAME}.tar + @echo "${MAKEFILE_DIST}:95: note: Creating source .gz tarball."; \ + '${GZIP_CMD}' -c9 '$<' > '$@' + +${DISTRIBUTION_TEMP_SOURCE_DIR}/${DISTRIBUTION_BASE_SOURCE_FILE_NAME}.tar: src_stage + @if [ -r '${DISTRIBUTION_TEMP_SOURCE_DIR}/src_stage.tar' ]; then \ + REBUILD_XCODE=`diff -q '${DISTRIBUTION_TEMP_SOURCE_ROOT}/${PROJECT_NAME}.xcodeproj/project.pbxproj' '${PROJECT_NAME}.xcodeproj/project.pbxproj'`; \ + REBUILD_TAR=`diff -q '${DISTRIBUTION_TEMP_SOURCE_DIR}/src_stage.tar' '${DISTRIBUTION_TEMP_SOURCE_DIR}/src_stage.find'`; \ + if [ "$${REBUILD_XCODE}" == "" ] && [ "$${REBUILD_TAR}" == "" ]; then exit 0; fi; \ + fi; \ + cd '${DISTRIBUTION_TEMP_SOURCE_DIR}'; \ + '${TAR}' cf '$@' '${DISTRIBUTION_BASE_SOURCE_FILE_NAME}'; \ + '${FIND}' '${DISTRIBUTION_TEMP_SOURCE_ROOT}' -ls | grep -v '${PROJECT_NAME}.xcodeproj' > '${DISTRIBUTION_TEMP_SOURCE_DIR}/src_stage.tar' + +src_stage: src_stage_main src_stage_pkg + @'${FILE_CHECK_SCRIPT}' '${DISTRIBUTION_SQL_DATABASE_FILE}' 'Source' '${DISTRIBUTION_TEMP_SOURCE_ROOT}' && \ + '${FIND}' '${DISTRIBUTION_TEMP_SOURCE_ROOT}' -ls | grep -v '${PROJECT_NAME}.xcodeproj' > '${DISTRIBUTION_TEMP_SOURCE_DIR}/src_stage.find' + +src_stage_main: ${DISTRIBUTION_TEMP_SOURCE_ROOT} + @'${RSYNC}' -a --cvs-exclude --delete \ + --exclude="\.*" \ + --exclude="*~" \ + --exclude="#*#" \ + --exclude='Source/Headers/RegexKit/pcre.h' \ + --exclude='Source/pcre' \ + ChangeLog LICENSE README README.MacOSX ReleaseNotes GNUstep Source '${BUILD_DIR}/${CONFIGURATION}/Documentation' \ + '${BUILD_DISTRIBUTION_DIR}/Documentation.html' '${BUILD_DISTRIBUTION_DIR}/Adding RegexKit to your Project.html' \ + '${DISTRIBUTION_TEMP_SOURCE_ROOT}' && \ + '${RSYNC}' -a --cvs-exclude '${BUILD_DISTRIBUTION_DIR}/distribution_pcre.h' '${DISTRIBUTION_TEMP_SOURCE_ROOT}/Source/Headers/RegexKit/pcre.h' && \ + mkdir -p '${DISTRIBUTION_TEMP_SOURCE_ROOT}/${PROJECT_NAME}.xcodeproj/' && \ + '${RSYNC}' -aC '${PROJECT_NAME}.xcodeproj/project.pbxproj' '${DISTRIBUTION_TEMP_SOURCE_ROOT}/${PROJECT_NAME}.xcodeproj/project.pbxproj' && \ + '${CHMOD}' -R g-w '${DISTRIBUTION_TEMP_SOURCE_ROOT}' && \ + '${SYSTEM_DEVELOPER_TOOLS}/SetFile' -t 'TEXT' '${DISTRIBUTION_TEMP_SOURCE_ROOT}/ChangeLog' && \ + '${SYSTEM_DEVELOPER_TOOLS}/SetFile' -t 'TEXT' '${DISTRIBUTION_TEMP_SOURCE_ROOT}/LICENSE' && \ + '${SYSTEM_DEVELOPER_TOOLS}/SetFile' -t 'TEXT' '${DISTRIBUTION_TEMP_SOURCE_ROOT}/README' && \ + '${SYSTEM_DEVELOPER_TOOLS}/SetFile' -t 'TEXT' '${DISTRIBUTION_TEMP_SOURCE_ROOT}/README.MacOSX' && \ + '${SYSTEM_DEVELOPER_TOOLS}/SetFile' -t 'TEXT' '${DISTRIBUTION_TEMP_SOURCE_ROOT}/ReleaseNotes' && \ + '${SYSTEM_DEVELOPER_TOOLS}/SetFile' -a E '${DISTRIBUTION_TEMP_SOURCE_ROOT}/Adding RegexKit to your Project.html' + +src_stage_pkg: src_stage_main + @'${RSYNC}' -aCE --delete \ + --exclude='/Adding RegexKit to your Project.html' \ + --exclude='/Documentation.html' \ + --exclude='/Documentation' \ + '${DISTRIBUTION_TEMP_SOURCE_ROOT}/' '${DISTRIBUTION_TEMP_SOURCE_DIR}/Sourcecode' && \ + '${CHMOD}' -R g+w '${DISTRIBUTION_TEMP_SOURCE_DIR}/Sourcecode' + diff --git a/Source/Build/Makefiles/Makefile.pcre b/Source/Build/Makefiles/Makefile.pcre index 85a2d99..753c328 100644 --- a/Source/Build/Makefiles/Makefile.pcre +++ b/Source/Build/Makefiles/Makefile.pcre @@ -165,7 +165,7 @@ build: pcre pcre: ${PCRE_TARGET_LIB_FILE} ${PROJECT_PCRE_HEADER_FILE} check_pcre_header clean: - echo "debug: Cleaning pcre."; \ + @echo "${MAKEFILE_PCRE}:168: note: Cleaning pcre."; \ rm -rf ${PCRE_CLEAN_DIRECTORIES}; distclean: clean @@ -184,7 +184,7 @@ distclean: clean # The PCRE_TEMP_DIR is created by the untaring of the distribution so it must be filtered here. $(filter-out ${PCRE_TEMP_DIR}, ${PCRE_DIRECTORIES}): - mkdir -p $@ + mkdir -p '$@' ##### fetch & untar # @@ -192,21 +192,21 @@ $(filter-out ${PCRE_TEMP_DIR}, ${PCRE_DIRECTORIES}): # ${PCRE_TARBALL_FILE_PATH}: - echo "debug: The pcre library distribution file '${PCRE_TARBALL_FILE_NAME}' does not exist. Downloading from '${PCRE_URL_ROOT}'."; \ + @echo "${MAKEFILE_PCRE}:195: note: The pcre library distribution file '${PCRE_TARBALL_FILE_NAME}' does not exist. Downloading from '${PCRE_URL_ROOT}'."; \ mkdir -p '${PCRE_TARBALL_DISTRIBUTIONS_DIR}'; \ ${PCRE_FETCH_COMMAND} || \ if [ ! -f '${PCRE_TARBALL_FILE_PATH}' ] || [ -z '${PCRE_TARBALL_FILE_PATH}' ]; then \ - echo "error: Unable to download the pcre library distribution file '${PCRE_TARBALL_FILE_NAME}'."; \ - echo "error: The shell command that was executed: '${PCRE_FETCH_COMMAND}'."; \ - echo "error: You can manually download the appropriate distribution file from 'http://www.pcre.org/'."; \ - echo "error: Place the downloaded distribution file in the directory '${PCRE_TARBALL_DISTRIBUTIONS_DIR}'."; \ - echo "error: The full path including the file name that I expect the tarball at is: '${PCRE_TARBALL_FILE_PATH}'."; \ + echo "${MAKEFILE_PCRE}:199: error: Unable to download the pcre library distribution file '${PCRE_TARBALL_FILE_NAME}'."; \ + echo "${MAKEFILE_PCRE}:200: error: The shell command that was executed: '${PCRE_FETCH_COMMAND}'."; \ + echo "${MAKEFILE_PCRE}:201: error: You can manually download the appropriate distribution file from 'http://www.pcre.org/'."; \ + echo "${MAKEFILE_PCRE}:202: error: Place the downloaded distribution file in the directory '${PCRE_TARBALL_DISTRIBUTIONS_DIR}'."; \ + echo "${MAKEFILE_PCRE}:203: error: The full path including the file name that I expect the tarball at is: '${PCRE_TARBALL_FILE_PATH}'."; \ exit 1; \ fi; ${PCRE_TEMP_DIR}: ${PCRE_TARBALL_FILE_PATH} - echo "debug: Untaring ${PCRE_TARBALL_FILE_NAME}."; \ - cd ${PCRE_TEMP_ROOT} && \ + @echo "${MAKEFILE_PCRE}:208: note: Untaring ${PCRE_TARBALL_FILE_NAME}."; \ + cd '${PCRE_TEMP_ROOT}' && \ ${PCRE_UNTAR_COMMAND}; ##### configure @@ -220,32 +220,27 @@ ${PCRE_TEMP_DIR}: ${PCRE_TARBALL_FILE_PATH} # Also handles proper compiler target architecture configuration. # +GCC_DUMPMACHINE=$(shell gcc -dumpmachine) +GCC_VENDOR_OS=$(shell '${PERL}' -e '($$_ = "${GCC_DUMPMACHINE}") =~ s/[^\-]+\-//; print($$_);') +CONFIGURE_BUILD_FOR=--build=${GCC_DUMPMACHINE} + ${PCRE_TEMP_DIR}/configure: ${PCRE_TEMP_DIR} ${PCRE_ARCH_MAKEFILES}: ${PCRE_TEMP_DIR}/configure - BUILD_FOR_ARCH="$(patsubst ${PCRE_CONFIGURE_DIR}/%/Makefile,%, $@)"; \ - BUILD_FOR_CONF_DIR="${PCRE_CONFIGURE_DIR}/$${BUILD_FOR_ARCH}"; \ - DARWIN_MAJOR_VER=`uname -r | ${PERL} -e '$$_ = <>; /^(\d+)\./; print "$$1\n";'`; \ - echo "debug: Configuring the pcre library for the '$${BUILD_FOR_ARCH}' architecture using the '${CONFIGURATION}' configuration. This may take some time."; \ - mkdir -p $${BUILD_FOR_CONF_DIR}; \ - if [ "$${BUILD_FOR_ARCH}" == "$${NATIVE_ARCH}" ]; then \ - BUILD_FOR_CONFIG_HOST=""; \ - BUILD_FOR_ARCH_FLAGS=""; \ - BUILD_FOR_ARCH_CFLAGS="${PCRE_NATIVE_CONF_CFLAGS}"; \ - else \ - BUILD_FOR_CONFIG_HOST="--host=$${BUILD_FOR_ARCH}-apple-darwin$${DARWIN_MAJOR_VER}"; \ - BUILD_FOR_ARCH_FLAGS="-arch $${BUILD_FOR_ARCH}"; \ - BUILD_FOR_ARCH_CFLAGS=""; \ - fi; \ - if [ "$${BUILD_FOR_ARCH}" == "i386" ]; then \ - BUILD_FOR_ARCH_CFLAGS="-mtune=generic"; \ - fi; \ - cd $${BUILD_FOR_CONF_DIR} && \ + @BUILD_FOR_ARCH="$(patsubst ${PCRE_CONFIGURE_DIR}/%/Makefile,%, $@)"; \ + HOST_ARCH="$${BUILD_FOR_ARCH}"; case $${HOST_ARCH} in i386 | x86_64 ) HOST_ARCH="i686"; ARCH_TUNE_FLAGS="-mtune=generic"; esac; \ + case $${BUILD_FOR_ARCH} in ppc | i386 ) ARCH_MACOSX_DEPLOYMENT_TARGET="10.4"; esac; \ + case $${BUILD_FOR_ARCH} in ppc64 | x86_64 ) ARCH_MACOSX_DEPLOYMENT_TARGET="10.5"; esac; \ + if [ "$${BUILD_FOR_ARCH}" == "ppc" ]; then ARCH_TUNE_FLAGS="-mtune=G4"; fi; \ + if [ "$${BUILD_FOR_ARCH}" == "ppc64" ]; then ARCH_TUNE_FLAGS="-mtune=G5"; fi; \ + echo "${MAKEFILE_PCRE}:236: note: Configuring the pcre library for the '$${BUILD_FOR_ARCH}' architecture using the '${CONFIGURATION}' configuration. This may take some time."; \ + mkdir -p "${PCRE_CONFIGURE_DIR}/$${BUILD_FOR_ARCH}"; \ + cd "${PCRE_CONFIGURE_DIR}/$${BUILD_FOR_ARCH}" && \ ../../configure --prefix="${PCRE_INSTALL_DIR}/$${BUILD_FOR_ARCH}" \ - $${BUILD_FOR_CONFIG_HOST} \ + ${CONFIGURE_BUILD_FOR} --host=$${HOST_ARCH}-${GCC_VENDOR_OS} --target=$${HOST_ARCH}-${GCC_VENDOR_OS} \ ${PCRE_CONF_OPTIONS} \ - CFLAGS="${PCRE_CONF_CFLAGS} $${BUILD_FOR_ARCH_FLAGS} $${BUILD_FOR_ARCH_CFLAGS}" \ - LDFLAGS="${PCRE_CONF_LDFLAGS} $${BUILD_FOR_ARCH_FLAGS}"; + CFLAGS="${PCRE_CONF_CFLAGS} -arch $${BUILD_FOR_ARCH} $${ARCH_TUNE_FLAGS} -mmacosx-version-min=$${ARCH_MACOSX_DEPLOYMENT_TARGET}" \ + LDFLAGS="${PCRE_CONF_LDFLAGS} -arch $${BUILD_FOR_ARCH} -mmacosx-version-min=$${ARCH_MACOSX_DEPLOYMENT_TARGET}"; ##### required pre-build steps # @@ -253,15 +248,15 @@ ${PCRE_ARCH_MAKEFILES}: ${PCRE_TEMP_DIR}/configure # ${PCRE_NATIVE_ARCH_FULLPATH_FILES}: ${PCRE_NATIVE_ARCH_MAKEFILE} - BUILD_FOR_ARCH="${NATIVE_ARCH}"; \ + @BUILD_FOR_ARCH="${NATIVE_ARCH}"; \ BUILD_FOR_TARGET="$(patsubst ${PCRE_NATIVE_ARCH_DIR}/%,%, $@)"; \ BUILD_FOR_CONF_DIR="${PCRE_NATIVE_ARCH_DIR}"; \ - echo "debug: Pre-building the pcre library for the '$${BUILD_FOR_ARCH}' native architecture using the '${CONFIGURATION}' configuration. This may take some time."; \ + echo "${MAKEFILE_PCRE}:254: note: Pre-building the pcre library for the '$${BUILD_FOR_ARCH}' native architecture using the '${CONFIGURATION}' configuration. This may take some time."; \ cd "$${BUILD_FOR_CONF_DIR}" && \ - ${MAKE} $${BUILD_FOR_TARGET} &>/dev/null; \ + '${MAKE}' $${BUILD_FOR_TARGET} &>/dev/null; \ LAST_RESULT=$$?; \ if [ $${LAST_RESULT} != 0 ]; then \ - echo "debug: '$${BUILD_FOR_TARGET}' returned code '$${LAST_RESULT}'. Possibly an invalid target for this pcre version. Continuing."; \ + echo "${MAKEFILE_PCRE}:259: note: '$${BUILD_FOR_TARGET}' returned code '$${LAST_RESULT}'. Possibly an invalid target for this pcre version. Continuing."; \ touch "$${BUILD_FOR_TARGET}"; \ fi; \ if [ -h "$${BUILD_FOR_TARGET}" ]; then \ @@ -272,11 +267,11 @@ ${PCRE_NATIVE_ARCH_FULLPATH_FILES}: ${PCRE_NATIVE_ARCH_MAKEFILE} fi; ${PCRE_NON_NATIVE_ARCH_FULLPATH_FILES}: ${PCRE_NON_NATIVE_ARCH_DIRS}/%: ${PCRE_NATIVE_ARCH_DIR}/% - BUILD_FOR_TARGET="$(notdir $@)"; \ + @BUILD_FOR_TARGET="$(notdir $@)"; \ BUILD_FOR_ARCH="$(patsubst ${PCRE_CONFIGURE_DIR}/%/$(notdir $@),%, $@)"; \ BUILD_FOR_CONF_DIR="${PCRE_CONFIGURE_DIR}/$${BUILD_FOR_ARCH}"; \ - echo "debug: Copying the required pre-built file '$${BUILD_FOR_TARGET}' from the '$${BUILD_FOR_ARCH}' native architecture to the '$${BUILD_FOR_TARGET}' non-native architecture."; \ - cp -f $< $@ + echo "${MAKEFILE_PCRE}:273: note: Copying the required pre-built file '$${BUILD_FOR_TARGET}' from the '$${BUILD_FOR_ARCH}' native architecture to the '$${BUILD_FOR_TARGET}' non-native architecture."; \ + '${CP}' -f '$<' '$@' ##### build # @@ -284,16 +279,17 @@ ${PCRE_NON_NATIVE_ARCH_FULLPATH_FILES}: ${PCRE_NON_NATIVE_ARCH_DIRS}/%: ${PCRE_N # ${PCRE_ARCH_LIB_FILES}: ${PCRE_ARCH_MAKEFILES} ${PCRE_NATIVE_ARCH_FULLPATH_FILES} ${PCRE_NON_NATIVE_ARCH_FULLPATH_FILES} - BUILD_FOR_ARCH="$(patsubst ${PCRE_INSTALL_DIR}/%/lib/libpcre.a,%, $@)"; \ + @BUILD_FOR_ARCH="$(patsubst ${PCRE_INSTALL_DIR}/%/lib/libpcre.a,%, $@)"; \ BUILD_FOR_CONF_DIR="${PCRE_CONFIGURE_DIR}/$${BUILD_FOR_ARCH}"; \ - echo "debug: Building the pcre library for the '$${BUILD_FOR_ARCH}' architecture using the '${CONFIGURATION}' configuration. This may take some time."; \ + echo "${MAKEFILE_PCRE}:284: note: Building the pcre library for the '$${BUILD_FOR_ARCH}' architecture using the '${CONFIGURATION}' configuration. This may take some time."; \ mkdir -p "$${BUILD_FOR_CONF_DIR}"; \ cd "$${BUILD_FOR_CONF_DIR}" && \ - ${MAKE} install + '${MAKE}' install +# if [ '${PCRE_PARALLEL_BUILD}' == "YES" ]; then '${MAKE}' -j '${CPUS}' -l '${MAXLOAD}' install; else '${MAKE}' install; fi; ${PCRE_UNIVERSAL_LIB_FILE}: ${PCRE_ARCH_LIB_FILES} ${PCRE_INSTALL_DIR}/lib - echo "debug: Combining the separate architectures libpcre.a results into a single universal binary libpcre.a."; \ - lipo $(foreach lib, $(filter-out ${PCRE_INSTALL_DIR}/lib, $^), "$(lib)") -create -output ${PCRE_UNIVERSAL_LIB_FILE} + @echo "${MAKEFILE_PCRE}:291: note: Combining the separate architectures libpcre.a results into a single universal binary libpcre.a."; \ + lipo $(foreach lib, $(filter-out ${PCRE_INSTALL_DIR}/lib, $^), "$(lib)") -create -output '${PCRE_UNIVERSAL_LIB_FILE}' ##### install # @@ -307,30 +303,33 @@ ${PCRE_UNIVERSAL_LIB_FILE}: ${PCRE_ARCH_LIB_FILES} ${PCRE_INSTALL_DIR}/lib # ${PCRE_TARGET_LIB_FILE}: ${PCRE_UNIVERSAL_LIB_FILE} ${PCRE_TARGET_BUILD_DIR}/lib - echo "debug: Symlinking build/${CONFIGURATION}/${PCRE_NAME_VERSION}/lib/libpcre.a -> actual libpcre.a."; \ - ln -sf ${PCRE_UNIVERSAL_LIB_FILE} ${PCRE_TARGET_LIB_FILE} + if [ ! -L '${PCRE_TARGET_LIB_FILE}' ]; then \ + @echo "${MAKEFILE_PCRE}:307: note: Symlinking build/${CONFIGURATION}/${PCRE_NAME_VERSION}/lib/libpcre.a -> actual libpcre.a."; \ + ln -sf '${PCRE_UNIVERSAL_LIB_FILE}' '${PCRE_TARGET_LIB_FILE}'; \ + fi; ${PROJECT_PCRE_HEADER_FILE}: check_pcre_header # This is a semi-hack which ensures that if the pcre library pcre.h header file changes in any way, we delete the frameworks copy in Source/Headers/RegexKit. # This ensures that we are exactly in sync with the linked against pcre version. -check_pcre_header: - if [ ! -f '${PROJECT_PCRE_HEADER_FILE}' ] && [ -f '${PCRE_HEADER_FILE}' ]; then \ - cp -p '${PCRE_HEADER_FILE}' '${PROJECT_PCRE_HEADER_FILE}'; \ +check_pcre_header: ${PCRE_UNIVERSAL_LIB_FILE} + @if [ ! -f '${PROJECT_PCRE_HEADER_FILE}' ] && [ -f '${PCRE_HEADER_FILE}' ]; then \ + '${CP}' -p '${PCRE_HEADER_FILE}' '${PROJECT_PCRE_HEADER_FILE}'; \ fi; \ if [ -f '${PROJECT_PCRE_HEADER_FILE}' ] && [ -f '${BUILD_DISTRIBUTION_TEMP_PCRE_HEADER_FILE}' ]; then \ TEMP_HEADER=`diff -q '${PROJECT_PCRE_HEADER_FILE}' '${BUILD_DISTRIBUTION_TEMP_PCRE_HEADER_FILE}'`; \ if [ "$${TEMP_HEADER}" == "" ]; then \ - cp -p '${PCRE_HEADER_FILE}' '${PROJECT_PCRE_HEADER_FILE}'; \ + rm -f '${PROJECT_PCRE_HEADER_FILE}'; \ + '${CP}' -p '${PCRE_HEADER_FILE}' '${PROJECT_PCRE_HEADER_FILE}'; \ fi; \ fi; \ if [ -f '${PROJECT_PCRE_HEADER_FILE}' ]; then \ PCRE_DIST_HEADER=`diff -q '${PROJECT_PCRE_HEADER_FILE}' '${PCRE_HEADER_FILE}'`; \ if [ "$${PCRE_DIST_HEADER}" != "" ]; then \ - echo "warning: The pcre distributions '${PCRE_HEADER_FILE}' header file and the frameworks '${PROJECT_PCRE_HEADER_FILE}' header file differ."; \ - echo "warning: This should be investigated and corrected if appropriate."; \ - echo "warning: This is likely due to rebuilding with a different version of the pcre library."; \ - echo "warning: If this is the case, replace the frameworks header file with the current pcre distributions version."; \ - echo "warning: I will not replace the frameworks header file because it may contain local edits."; \ + echo "${MAKEFILE_PCRE}:329: warning: The pcre distributions '${PCRE_HEADER_FILE}' header file and the frameworks '${PROJECT_PCRE_HEADER_FILE}' header file differ."; \ + echo "${MAKEFILE_PCRE}:330: warning: This should be investigated and corrected if appropriate."; \ + echo "${MAKEFILE_PCRE}:331: warning: This is likely due to rebuilding with a different version of the pcre library."; \ + echo "${MAKEFILE_PCRE}:332: warning: If this is the case, replace the frameworks header file with the current pcre distributions version."; \ + echo "${MAKEFILE_PCRE}:333: warning: I will not replace the frameworks header file because it may contain local edits."; \ fi; \ fi; diff --git a/Source/Build/Packagemaker/Resources/English.lproj/Conclusion.rtf b/Source/Build/Packagemaker/Resources/English.lproj/Conclusion.rtf new file mode 100755 index 0000000..e75d276 --- /dev/null +++ b/Source/Build/Packagemaker/Resources/English.lproj/Conclusion.rtf @@ -0,0 +1,4 @@ +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl} +{\colortbl;\red255\green255\blue255;} +} \ No newline at end of file diff --git a/Source/Build/Packagemaker/Resources/English.lproj/License.rtf b/Source/Build/Packagemaker/Resources/English.lproj/License.rtf new file mode 100755 index 0000000..b57299f --- /dev/null +++ b/Source/Build/Packagemaker/Resources/English.lproj/License.rtf @@ -0,0 +1,38 @@ +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fmodern\fcharset77 Courier;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\f0\fs36 \cf0 Important Information\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\fs24 \cf0 \ +RegexKit uses the PCRE library, written by Philip Hazel and Copyright \'a9 1997-2007 University of Cambridge, as its regular expression pattern matching engine. Therefore, RegexKit requires and incorporates the PCRE library in to the framework executable. Because of this, you should be aware of the PCRE library licensing requirements.\ +\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li360\ql\qnatural\pardirnatural +\cf0 Website {\field{\*\fldinst{HYPERLINK "http://www.pcre.org/"}}{\fldrslt http://www.pcre.org/}}\ +License {\field{\*\fldinst{HYPERLINK "http://www.pcre.org/license.txt"}}{\fldrslt http://www.pcre.org/license.txt}}\ +Type BSD License (at time of publication)\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li360\fi-360\ql\qnatural\pardirnatural +\cf0 \ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\fs36 \cf0 The RegexKit License\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\fs24 \cf0 \ +Copyright \'a9 2007, John Engelhart\ +\ +All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li720\fi-720\sa240\ql\qnatural\pardirnatural +\ls1\ilvl0\cf0 {\listtext \'a5 }Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\ +{\listtext \'a5 }Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\ +{\listtext \'a5 }Neither the name of the Zang Industries nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\f1 \cf0 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.} \ No newline at end of file diff --git a/Source/Build/Packagemaker/Resources/English.lproj/ReadMe.rtf b/Source/Build/Packagemaker/Resources/English.lproj/ReadMe.rtf new file mode 100755 index 0000000..bb7839e --- /dev/null +++ b/Source/Build/Packagemaker/Resources/English.lproj/ReadMe.rtf @@ -0,0 +1,104 @@ +{\rtf1\ansi\ansicpg1252\cocoartf949 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\f0\fs36 \cf0 RegexKit 0.3.0\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\fs24 \cf0 \ +RegexKit will install in the following directories by default:\ +\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\fi360\ql\qnatural\pardirnatural + +\f1 \cf0 /Developer/Local/\ +/Library/Developer/Shared/Documentation/DocSets/ +\f0 \ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural +\cf0 \ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\fs36 \cf0 What's New in 0.3.0\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\fs24 \cf0 \ +\pard\tx220\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li720\fi-720\ql\qnatural\pardirnatural +\ls1\ilvl0\cf0 {\listtext \'95 }Mac OS X Installer.\ +{\listtext \'95 }Mac OS X 10.5 support.\ +{\listtext \'95 } +\f1 RegexKit.framework Info.plist +\f0 version corrected.\ +{\listtext \'95 }Minor documentation updates.\ +{\listtext \'95 }Parallel target builds.\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural +\cf0 \ +The new Mac OS X +\f1 .dmg +\f0 distribution combines the previously separate binary and source code bundles into a single, convenient installer based package.\ +\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\fs36 \cf0 Mac OS X 10.5 Features\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\fs24 \cf0 \ +\pard\tx220\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li720\fi-720\ql\qnatural\pardirnatural +\ls2\ilvl0\cf0 {\listtext \'95 }64 bit support.\ +{\listtext \'95 }Garbage Collection enabled.\ +{\listtext \'95 }Documentation available in native Xcode 3.0 DocSet format.\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural +\cf0 \ +The RegexKit.framework binary now includes support for four architectures: +\f1 ppc +\f0 , +\f1 ppc64 +\f0 , +\f1 i386 +\f0 , and +\f1 x86_64 +\f0 . The 32 bit architecture images require a minimum Mac OS X of 10.4, while the 64 bit architecture versions require a minimum of 10.5.\ +\ +The choice between using Garbage Collection or the traditional +\f1 retain +\f0 / +\f1 release +\f0 style of memory management is made at load time. If the dynamic linker determines that the necessary Garbage Collection prerequisites have been met, RegexKit switches to using Garbage Collection. Otherwise if Garbage Collection is not active at load time, RegexKit uses the traditional +\f1 retain +\f0 / +\f1 release +\f0 style of memory management.\ +\ +The documentation for RegexKit is now available in the new Xcode 3.0 DocSet format. This allows you to access the frameworks documentation from within Xcode, including real time access via the Research Assistant. The DocSet documentation is installed in +\f1 /Library/Developer/Shared/Documentation/DocSets/ +\f0 , which Xcode 3.0 is set to scan automatically. You may have to quit and restart Xcode in order for the documentation to appear. Subscriptions are not yet enabled despite the subscription button being present.\ +\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\fs36 \cf0 Prerequisites\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\fs24 \cf0 \ +The perl +\f1 DBD::SQLite +\f0 module is required on Mac OS X 10.4 to build the +\f1 Documentation +\f0 , +\f1 DocSet +\f0 , and +\f1 Distribution +\f0 targets. Mac OS X 10.5 includes +\f1 DBD::SQLite +\f0 by default. More information can be found at:\ +\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\fi360\ql\qnatural\pardirnatural +{\field{\*\fldinst{HYPERLINK "http://search.cpan.org/dist/DBD-SQLite/"}}{\fldrslt \cf0 http://search.cpan.org/dist/DBD-SQLite/}}\ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural +\cf0 \ +The +\f1 DBD::SQLite +\f0 module +\i\b is not +\i0\b0 required to compile the framework or execute the unit tests.} \ No newline at end of file diff --git a/Source/Build/Packagemaker/Resources/English.lproj/Welcome.rtf b/Source/Build/Packagemaker/Resources/English.lproj/Welcome.rtf new file mode 100755 index 0000000..e75d276 --- /dev/null +++ b/Source/Build/Packagemaker/Resources/English.lproj/Welcome.rtf @@ -0,0 +1,4 @@ +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 +{\fonttbl} +{\colortbl;\red255\green255\blue255;} +} \ No newline at end of file diff --git a/Source/Build/Packagemaker/plists/DocSet_desc.plist b/Source/Build/Packagemaker/plists/DocSet_desc.plist new file mode 100644 index 0000000..2faf6a6 --- /dev/null +++ b/Source/Build/Packagemaker/plists/DocSet_desc.plist @@ -0,0 +1,10 @@ + + + + + IFPkgDescriptionDescription + + IFPkgDescriptionTitle + RegexKit DocSet Documentation + + diff --git a/Source/Build/Packagemaker/plists/DocSet_info.plist b/Source/Build/Packagemaker/plists/DocSet_info.plist new file mode 100644 index 0000000..1c981cb --- /dev/null +++ b/Source/Build/Packagemaker/plists/DocSet_info.plist @@ -0,0 +1,44 @@ + + + + + CFBundleGetInfoString + updated.by.buildDistribution + CFBundleIdentifier + com.zang.RegexKit.Documentation.docset.pkg + CFBundleShortVersionString + updated.by.buildDistribution + IFMajorVersion + updated.by.buildDistribution + IFMinorVersion + updated.by.buildDistribution + IFPkgFlagAllowBackRev + + IFPkgFlagAuthorizationAction + AdminAuthorization + IFPkgFlagBackgroundAlignment + topleft + IFPkgFlagBackgroundScaling + none + IFPkgFlagDefaultLocation + updated.by.buildDistribution + IFPkgFlagFollowLinks + + IFPkgFlagInstallFat + + IFPkgFlagIsRequired + + IFPkgFlagOverwritePermissions + + IFPkgFlagRelocatable + + IFPkgFlagRestartAction + NoRestart + IFPkgFlagRootVolumeOnly + + IFPkgFlagUpdateInstalledLanguages + + IFPkgFormatVersion + 0.10000000149011612 + + diff --git a/Source/Build/Packagemaker/plists/Documentation_desc.plist b/Source/Build/Packagemaker/plists/Documentation_desc.plist new file mode 100644 index 0000000..03afc45 --- /dev/null +++ b/Source/Build/Packagemaker/plists/Documentation_desc.plist @@ -0,0 +1,10 @@ + + + + + IFPkgDescriptionDescription + + IFPkgDescriptionTitle + RegexKit HTML Documentation + + diff --git a/Source/Build/Packagemaker/plists/Documentation_info.plist b/Source/Build/Packagemaker/plists/Documentation_info.plist new file mode 100644 index 0000000..ad40613 --- /dev/null +++ b/Source/Build/Packagemaker/plists/Documentation_info.plist @@ -0,0 +1,44 @@ + + + + + CFBundleGetInfoString + updated.by.buildDistribution + CFBundleIdentifier + com.zang.RegexKit.Documentation.html.pkg + CFBundleShortVersionString + updated.by.buildDistribution + IFMajorVersion + updated.by.buildDistribution + IFMinorVersion + updated.by.buildDistribution + IFPkgFlagAllowBackRev + + IFPkgFlagAuthorizationAction + AdminAuthorization + IFPkgFlagBackgroundAlignment + topleft + IFPkgFlagBackgroundScaling + none + IFPkgFlagDefaultLocation + updated.by.buildDistribution + IFPkgFlagFollowLinks + + IFPkgFlagInstallFat + + IFPkgFlagIsRequired + + IFPkgFlagOverwritePermissions + + IFPkgFlagRelocatable + + IFPkgFlagRestartAction + NoRestart + IFPkgFlagRootVolumeOnly + + IFPkgFlagUpdateInstalledLanguages + + IFPkgFormatVersion + 0.10000000149011612 + + diff --git a/Source/Build/Packagemaker/plists/Framework_desc.plist b/Source/Build/Packagemaker/plists/Framework_desc.plist new file mode 100644 index 0000000..a29aa7b --- /dev/null +++ b/Source/Build/Packagemaker/plists/Framework_desc.plist @@ -0,0 +1,10 @@ + + + + + IFPkgDescriptionDescription + + IFPkgDescriptionTitle + RegexKit Framework + + diff --git a/Source/Build/Packagemaker/plists/Framework_info.plist b/Source/Build/Packagemaker/plists/Framework_info.plist new file mode 100644 index 0000000..5bfdb5f --- /dev/null +++ b/Source/Build/Packagemaker/plists/Framework_info.plist @@ -0,0 +1,44 @@ + + + + + CFBundleGetInfoString + updated.by.buildDistribution + CFBundleIdentifier + com.zang.RegexKit.Framework.pkg + CFBundleShortVersionString + updated.by.buildDistribution + IFMajorVersion + updated.by.buildDistribution + IFMinorVersion + updated.by.buildDistribution + IFPkgFlagAllowBackRev + + IFPkgFlagAuthorizationAction + AdminAuthorization + IFPkgFlagBackgroundAlignment + topleft + IFPkgFlagBackgroundScaling + none + IFPkgFlagDefaultLocation + updated.by.buildDistribution + IFPkgFlagFollowLinks + + IFPkgFlagInstallFat + + IFPkgFlagIsRequired + + IFPkgFlagOverwritePermissions + + IFPkgFlagRelocatable + + IFPkgFlagRestartAction + NoRestart + IFPkgFlagRootVolumeOnly + + IFPkgFlagUpdateInstalledLanguages + + IFPkgFormatVersion + 0.10000000149011612 + + diff --git a/Source/Build/Packagemaker/plists/RegexKit_mpkg_info.plist b/Source/Build/Packagemaker/plists/RegexKit_mpkg_info.plist new file mode 100644 index 0000000..e477258 --- /dev/null +++ b/Source/Build/Packagemaker/plists/RegexKit_mpkg_info.plist @@ -0,0 +1,18 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleGetInfoString + updated.by.buildDistribution + CFBundleIdentifier + com.zang.RegexKit.mpkg + CFBundleInfoDictionaryVersion + 6.0 + CFBundleShortVersionString + updated.by.buildDistribution + CFBundleVersion + updated.by.buildDistribution + + diff --git a/Source/Build/Packagemaker/plists/Sourcecode_desc.plist b/Source/Build/Packagemaker/plists/Sourcecode_desc.plist new file mode 100644 index 0000000..88d2e39 --- /dev/null +++ b/Source/Build/Packagemaker/plists/Sourcecode_desc.plist @@ -0,0 +1,10 @@ + + + + + IFPkgDescriptionDescription + + IFPkgDescriptionTitle + RegexKit Sourcecode + + diff --git a/Source/Build/Packagemaker/plists/Sourcecode_info.plist b/Source/Build/Packagemaker/plists/Sourcecode_info.plist new file mode 100644 index 0000000..24a5320 --- /dev/null +++ b/Source/Build/Packagemaker/plists/Sourcecode_info.plist @@ -0,0 +1,44 @@ + + + + + CFBundleGetInfoString + updated.by.buildDistribution + CFBundleIdentifier + com.zang.RegexKit.Sourcecode.pkg + CFBundleShortVersionString + updated.by.buildDistribution + IFMajorVersion + updated.by.buildDistribution + IFMinorVersion + updated.by.buildDistribution + IFPkgFlagAllowBackRev + + IFPkgFlagAuthorizationAction + AdminAuthorization + IFPkgFlagBackgroundAlignment + topleft + IFPkgFlagBackgroundScaling + none + IFPkgFlagDefaultLocation + updated.by.buildDistribution + IFPkgFlagFollowLinks + + IFPkgFlagInstallFat + + IFPkgFlagIsRequired + + IFPkgFlagOverwritePermissions + + IFPkgFlagRelocatable + + IFPkgFlagRestartAction + NoRestart + IFPkgFlagRootVolumeOnly + + IFPkgFlagUpdateInstalledLanguages + + IFPkgFormatVersion + 0.10000000149011612 + + diff --git a/Source/Build/Packagemaker/plists/pcre_desc.plist b/Source/Build/Packagemaker/plists/pcre_desc.plist new file mode 100644 index 0000000..6cb32d7 --- /dev/null +++ b/Source/Build/Packagemaker/plists/pcre_desc.plist @@ -0,0 +1,10 @@ + + + + + IFPkgDescriptionDescription + + IFPkgDescriptionTitle + RegexKit PCRE Distribution + + diff --git a/Source/Build/Packagemaker/plists/pcre_info.plist b/Source/Build/Packagemaker/plists/pcre_info.plist new file mode 100644 index 0000000..1f9f118 --- /dev/null +++ b/Source/Build/Packagemaker/plists/pcre_info.plist @@ -0,0 +1,44 @@ + + + + + CFBundleGetInfoString + updated.by.buildDistribution + CFBundleIdentifier + com.zang.RegexKit.pcre.pkg + CFBundleShortVersionString + updated.by.buildDistribution + IFMajorVersion + updated.by.buildDistribution + IFMinorVersion + updated.by.buildDistribution + IFPkgFlagAllowBackRev + + IFPkgFlagAuthorizationAction + AdminAuthorization + IFPkgFlagBackgroundAlignment + topleft + IFPkgFlagBackgroundScaling + none + IFPkgFlagDefaultLocation + updated.by.buildDistribution + IFPkgFlagFollowLinks + + IFPkgFlagInstallFat + + IFPkgFlagIsRequired + + IFPkgFlagOverwritePermissions + + IFPkgFlagRelocatable + + IFPkgFlagRestartAction + NoRestart + IFPkgFlagRootVolumeOnly + + IFPkgFlagUpdateInstalledLanguages + + IFPkgFormatVersion + 0.10000000149011612 + + diff --git a/Source/Build/SQL/files.sql b/Source/Build/SQL/files.sql index 8c57a59..d42789c 100644 --- a/Source/Build/SQL/files.sql +++ b/Source/Build/SQL/files.sql @@ -52,6 +52,7 @@ CREATE TRIGGER upd_vfid_common UPDATE OF fid ON file BEGIN UPDATE common SET vfi INSERT INTO cluster (cid, name, type) VALUES (1, "Binary", "Master"); INSERT INTO cluster (cid, name, type) VALUES (2, "Source", "Master"); +INSERT INTO file (cid, name, type, mode) VALUES (1, '/Adding RegexKit to your Project.html', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (1, '/ChangeLog', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (1, '/Documentation.html', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (1, '/LICENSE', 'f', 33188); @@ -169,12 +170,14 @@ INSERT INTO file (cid, name, type, mode) VALUES (1, '/RegexKit.framework/Version INSERT INTO file (cid, name, type, mode) VALUES (1, '/RegexKit.framework/Versions/A/Resources/English.lproj', 'd', 16877); INSERT INTO file (cid, name, type, mode) VALUES (1, '/RegexKit.framework/Versions/A/Resources/English.lproj/InfoPlist.strings', 'f', 33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Adding RegexKit to your Project.html', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/ChangeLog', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/LICENSE', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/README', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/README.MacOSX', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/ReleaseNotes', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Documentation', 'd', 16877); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Documentation.html','f',33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Documentation/Constants.html', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Documentation/content.html', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Documentation/content_frame.html', 'f', 33188); @@ -284,14 +287,37 @@ INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/RKRegex.m', 'f', 33 INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/RKUtility.m', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build', 'd', 16877); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Distribution', 'd', 16877); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Distribution/Adding RegexKit to your Project.html', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Distribution/distribution_pcre.h', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Distribution/Documentation.html', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Makefiles', 'd', 16877); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Makefiles/Makefile.dist', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Makefiles/Makefile.pcre', 'f', 33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker','d',16877); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists','d',16877); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/DocSet_desc.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/DocSet_info.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/Documentation_desc.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/Documentation_info.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/Framework_desc.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/Framework_info.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/RegexKit_mpkg_info.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/Sourcecode_desc.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/Sourcecode_info.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/pcre_desc.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/plists/pcre_info.plist','f',33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/Resources','d',16877); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/Resources/English.lproj','d',16877); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/Resources/English.lproj/Conclusion.rtf','f',33261); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/Resources/English.lproj/License.rtf','f',33261); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/Resources/English.lproj/ReadMe.rtf','f',33261); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Packagemaker/Resources/English.lproj/Welcome.rtf','f',33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Scripts', 'd', 16877); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Scripts/buildDistribution.sh', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Scripts/buildPCRE.sh', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Scripts/fileCheck.pl', 'f', 33261); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Scripts/packageDist.pl','f',33261); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Scripts/plistUtil.pl','f',33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/Scripts/stripHeaderdoc.sh', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/SQL', 'd', 16877); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Build/SQL/files.sql', 'f', 33188); @@ -325,15 +351,18 @@ INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Resou INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Resources/JavaScript/common.js', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Resources/JavaScript/toc.js', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Scripts', 'd', 16877); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Scripts/buildDocSet.sh', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Scripts/buildDocumentation.sh', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Scripts/checkHTML.sh', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Scripts/checkSpelling.sh', 'f', 33261); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Scripts/createDocSet.pl', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Scripts/generateHTML.pl', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Scripts/generatePCREToC.pl', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Scripts/parseHeaders.pl', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Scripts/resolveLinks.pl', 'f', 33261); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/SQL', 'd', 16877); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/SQL/config.sql', 'f', 33188); +INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/SQL/docset.sql', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/SQL/init.sql', 'f', 33188); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Static', 'd', 16877); INSERT INTO file (cid, name, type, mode) VALUES (2, '/Source/Documentation/Static/index.html', 'f', 33188); diff --git a/Source/Build/Scripts/buildDistribution.sh b/Source/Build/Scripts/buildDistribution.sh index 8089fe8..fc27416 100755 --- a/Source/Build/Scripts/buildDistribution.sh +++ b/Source/Build/Scripts/buildDistribution.sh @@ -6,28 +6,35 @@ export BZIP2_CMD=${BZIP2_CMD:?"error: Environment variable BZIP2_CMD must exist, export CONFIGURATION=${CONFIGURATION:?"error: Environment variable CONFIGURATION must exist, aborting."} export DISTRIBUTION_BASE_FILE_NAME=${DISTRIBUTION_BASE_FILE_NAME:?"error: Environment variable DISTRIBUTION_BASE_FILE_NAME must exist, aborting."} export DISTRIBUTION_BASE_SOURCE_FILE_NAME=${DISTRIBUTION_BASE_SOURCE_FILE_NAME:?"error: Environment variable DISTRIBUTION_BASE_SOURCE_FILE_NAME must exist, aborting."} +export DISTRIBUTION_DEFAULT_INSTALL_DIR=${DISTRIBUTION_DEFAULT_INSTALL_DIR:?"error: Environment variable DISTRIBUTION_DEFAULT_INSTALL_DIR must exist, aborting."} export DISTRIBUTION_TARGET_DIR=${DISTRIBUTION_TARGET_DIR:?"error: Environment variable DISTRIBUTION_TARGET_DIR must exist, aborting."} export DISTRIBUTION_ROOT=${DISTRIBUTION_ROOT:?"error: Environment variable DISTRIBUTION_ROOT must exist, aborting."} export DISTRIBUTION_DMG_CONVERT_OPTS=${DISTRIBUTION_DMG_CONVERT_OPTS:?"error: Environment variable DISTRIBUTION_DMG_CONVERT_OPTS must exist, aborting."} export DISTRIBUTION_DMG_VOL_NAME=${DISTRIBUTION_DMG_VOL_NAME:?"error: Environment variable DISTRIBUTION_DMG_VOL_NAME must exist, aborting."} export DISTRIBUTION_ROOT_NAME=${DISTRIBUTION_ROOT_NAME:?"error: Environment variable DISTRIBUTION_ROOT_NAME must exist, aborting."} export DOCUMENTATION_TARGET_DIR=${DOCUMENTATION_TARGET_DIR:?"error: Environment variable DOCUMENTATION_TARGET_DIR must exist, aborting."} -export DOCUMENTATION_README_DIR=${DOCUMENTATION_README_DIR:?"error: Environment variable DOCUMENTATION_README_DIR must exist, aborting."} export FIND=${FIND:?"error: Environment variable FIND must exist, aborting."} export GZIP_CMD=${GZIP_CMD:?"error: Environment variable GZIP_CMD must exist, aborting."} +export PCRE_VERSION=${PCRE_VERSION:?"Environment variable PCRE_VERSION must exist, aborting."} export PERL=${PERL:?"Environment variable PERL must exist, aborting."} export PROJECT_DIR=${PROJECT_DIR:?"Environment variable PROJECT_DIR must exist, aborting."} export PROJECT_NAME=${PROJECT_NAME:?"Environment variable PROJECT_NAME must exist, aborting."} export RSYNC=${RSYNC:?"Environment variable RSYNC must exist, aborting."} export SQLITE=${SQLITE:?"Environment variable SQLITE must exist, aborting."} +export TAR=${TAR:?"Environment variable TAR must exist, aborting."} export TEMP_FILES_DIR=${TEMP_FILES_DIR:?"error: Environment variable TEMP_FILES_DIR must exist, aborting."} if [ "${CONFIGURATION}" != "Release" ]; then echo "$0:$LINENO: error: Distribution can only be built under the 'Release' configuration."; exit 1; fi; -${PERL} -e 'require DBD::SQLite;' >/dev/null 2>&1 +"${PERL}" -e 'require DBD::SQLite;' >/dev/null 2>&1 if [ $? != 0 ]; then echo "$0:$LINENO: error: The perl module 'DBD::SQLite' must be installed in order to build the the target '${TARGETNAME}'."; exit 1; fi; +/usr/bin/renice 20 -p $$ + +# Get the pcre major and minor version numbers from PCRE_VERSION +eval `"${PERL}" -e '$ARGV[0] =~ /(\d+)\.(\d+)/; print("export PCRE_VERSION_MAJOR=$1; export PCRE_VERSION_MINOR=$2;\n");' ${PCRE_VERSION}` + if [ "${P7ZIP}" == "" ]; then if [ -x 7za ]; then P7ZIP="7za"; elif [ -x /usr/local/bin/7za ]; then P7ZIP="/usr/local/bin/7za"; @@ -36,51 +43,15 @@ if [ "${P7ZIP}" == "" ]; then fi fi -compress_tarball() -{ - local TARBALL_DIR="$1"; - local TARBALL_FILE="$2"; - local TARBALL_FILEPATH="${TARBALL_DIR}/${TARBALL_FILE}"; - - if [ ! -f "${TARBALL_FILEPATH}" ] || [ -z "${TARBALL_FILEPATH}" ]; then return 1; fi; - - echo "debug: Compressing tarball '${TARBALL_FILE}' with bzip2." - "${BZIP2_CMD}" -k9 "${TARBALL_FILEPATH}" - if [ $? != 0 ]; then echo "$0:$LINENO: error: Error creating '${TARBALL_FILE}.bz2' with bzip2 command '${BZIP2_CMD}'."; return 1; fi; - - echo "debug: Compressing tarball '${TARBALL_FILE}' with gzip." - "${GZIP_CMD}" -c9 "${TARBALL_FILEPATH}" > "${TARBALL_FILEPATH}.gz" - if [ $? != 0 ]; then echo "$0:$LINENO: error: Error creating '${TARBALL_FILE}.gz' with gzip command '${GZIP_CMD}'."; return 1; fi; - - if [ -x "${P7ZIP}" ]; then - echo "debug: Compressing tarball '${TARBALL_FILE}' with p7zip." - "${P7ZIP}" a "${TARBALL_FILEPATH}.7z" -mx=9 "${TARBALL_FILEPATH}" - if [ $? != 0 ]; then echo "$0:$LINENO: error: Error creating '${TARBALL_FILE}.7z' with p7zip command '${P7ZIP}'."; return 1; fi; - chmod ugo+r "${TARBALL_FILEPATH}.7z" +if [ "${PACKAGEMAKER}" == "" ]; then + if [ -x packagemaker ]; then PACKAGEMAKER="packagemaker"; + elif [ -x /Developer/Tools/packagemaker ]; then PACKAGEMAKER="/Developer/Tools/packagemaker"; + elif [ -x /Developer/usr/bin/packagemaker ]; then PACKAGEMAKER="/Developer/usr/bin/packagemaker"; + else echo "$0:$LINENO: error: Unable to locate the executable 'packagemaker'."; exit 1; fi -} +fi -create_tarball() -{ - local TARBALL_DIR="$1"; - local TARBALL_FILE="$2"; - local TARBALL_ARCHIVE_ROOT="$3"; - local TARBALL_ARCHIVE="$4"; - - local CURRENT_DIR=`pwd`; - - cd "${TARBALL_ARCHIVE_ROOT}" && \ - echo "cwd: " `pwd` && \ - tar cf "${TARBALL_DIR}/${TARBALL_FILE}" "${TARBALL_ARCHIVE}" && \ - compress_tarball "${TARBALL_DIR}" "${TARBALL_FILE}" && \ - rm "${TARBALL_DIR}/${TARBALL_FILE}" - - local RETURN_RESULT="$?"; - - cd "${CURRENT_DIR}" - - return $RETURN_RESULT; -} +if [ ! -x "${PACKAGEMAKER}" ] ; then echo "$0:$LINENO: error: The PackageMaker tool '${PACKAGEMAKER}' does not exist."; exit 1; fi; create_dmg() { @@ -96,20 +67,66 @@ create_dmg() local DMG_TMP_FILE="tmp_${DMG_FILE}"; local DMG_TMP_FILEPATH="${DMG_DIR}/${DMG_TMP_FILE}"; - echo "debug: Creating '${DMG_FILE}' .dmg image." + echo "$0:$LINENO: note: Creating '${DMG_FILE}' disk image." hdiutil makehybrid -o "${DMG_TMP_FILEPATH}" -hfs -hfs-volume-name "${DMG_VOL_NAME}" "${DMG_DIR}/${DMG_ARCHIVE}" if [ $? != 0 ]; then echo "$0:$LINENO: error: Error creating temporary '${DMG_FILE}' with the 'hdiutil' command."; return 1; fi; - echo "debug: Compressing .dmg image." + echo "$0:$LINENO: note: Compressing .dmg image." hdiutil convert ${DMG_CONVERT_OPS} -o "${DMG_FILEPATH}" "${DMG_TMP_FILEPATH}" if [ $? != 0 ]; then echo "$0:$LINENO: error: Error compressing '${DMG_FILE}' with the 'hdiutil' command."; return 1; fi; rm -f "${DMG_TMP_FILEPATH}" - if [ ! -f "${DMG_FILEPATH}" ]; then echo "$0:$LINENO: error: Did not create the .dmg image '${DMG_FILE}'."; return 1; fi; + if [ ! -f "${DMG_FILEPATH}" ]; then echo "$0:$LINENO: error: Did not create the .dmg disk image '${DMG_FILE}'."; return 1; fi; if [ "${DMG_INTERNET_ENABLE}" == "YES" ]; then hdiutil internet-enable -yes "${DMG_FILEPATH}" if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to Internet Enable '${DMG_FILE}' with the 'hdiutil' command."; return 1; fi; fi; } +updateVersion() +{ + local FILE_NAME="$1"; + local MAJOR_VERSION="$2"; + local MINOR_VERSION="$3"; + local POINT_VERSION="$4"; + local INSTALL_DIR="$5"; + + "${PLISTUTIL_SCRIPT}" "${FILE_NAME}" CFBundleGetInfoString "${MAJOR_VERSION}.${MINOR_VERSION}.${POINT_VERSION}, Copyright 2007 John Engelhart" && \ + "${PLISTUTIL_SCRIPT}" "${FILE_NAME}" CFBundleShortVersionString "${MAJOR_VERSION}.${MINOR_VERSION}.${POINT_VERSION}" && \ + "${PLISTUTIL_SCRIPT}" "${FILE_NAME}" CFBundleVersion "${MAJOR_VERSION}.${MINOR_VERSION}.${POINT_VERSION}" && \ + "${PLISTUTIL_SCRIPT}" "${FILE_NAME}" IFMajorVersion "${MAJOR_VERSION}" && \ + "${PLISTUTIL_SCRIPT}" "${FILE_NAME}" IFMinorVersion "${MINOR_VERSION}" && \ + "${PLISTUTIL_SCRIPT}" "${FILE_NAME}" IFPkgFlagDefaultLocation "${INSTALL_DIR}" + + return $? +} + +updateRegexKitMpkgVersion() +{ + local FILE_NAME="$1"; + local MAJOR_VERSION="$2"; + local MINOR_VERSION="$3"; + local POINT_VERSION="$4"; + + "${PLISTUTIL_SCRIPT}" "${FILE_NAME}" CFBundleGetInfoString "${MAJOR_VERSION}.${MINOR_VERSION}.${POINT_VERSION}, Copyright 2007 John Engelhart" && \ + "${PLISTUTIL_SCRIPT}" "${FILE_NAME}" CFBundleShortVersionString "${MAJOR_VERSION}.${MINOR_VERSION}.${POINT_VERSION}" && \ + "${PLISTUTIL_SCRIPT}" "${FILE_NAME}" CFBundleVersion "${MAJOR_VERSION}.${MINOR_VERSION}.${POINT_VERSION}" + + return $? +} + +updatePackageInfoPlists() +{ + if [ ! -d "$1" ] ; then return 1; fi; + updateVersion "$1/Framework_info.plist" ${PROJECT_VERSION_MAJOR} ${PROJECT_VERSION_MINOR} ${PROJECT_VERSION_POINT} "${DISTRIBUTION_DEFAULT_INSTALL_DIR}/Frameworks" && \ + updateVersion "$1/DocSet_info.plist" ${PROJECT_VERSION_MAJOR} ${PROJECT_VERSION_MINOR} ${PROJECT_VERSION_POINT} "/Library/Developer/Shared/Documentation/DocSets/" && \ + updateVersion "$1/Documentation_info.plist" ${PROJECT_VERSION_MAJOR} ${PROJECT_VERSION_MINOR} ${PROJECT_VERSION_POINT} "${DISTRIBUTION_DEFAULT_INSTALL_DIR}/RegexKit/" && \ + updateVersion "$1/Sourcecode_info.plist" ${PROJECT_VERSION_MAJOR} ${PROJECT_VERSION_MINOR} ${PROJECT_VERSION_POINT} "${DISTRIBUTION_DEFAULT_INSTALL_DIR}/RegexKit/" && \ + updateVersion "$1/pcre_info.plist" ${PCRE_VERSION_MAJOR} ${PCRE_VERSION_MINOR} 0 "${DISTRIBUTION_DEFAULT_INSTALL_DIR}/RegexKit/" && \ + "${PLISTUTIL_SCRIPT}" "$1/pcre_info.plist" CFBundleGetInfoString "${PCRE_VERSION_MAJOR}.${PCRE_VERSION_MINOR}.0, Copyright (c) 1997-2007 University of Cambridge" && \ + updateRegexKitMpkgVersion "$1/RegexKit_mpkg_info.plist" ${PROJECT_VERSION_MAJOR} ${PROJECT_VERSION_MINOR} ${PROJECT_VERSION_POINT} + + return $? +} + if [ ! -r "${DISTRIBUTION_SQL_FILES_FILE}" ]; then echo "$0:$LINENO: error: The sql database creation file 'files.sql' does not exist in '${BUILD_SQL_DIR}'."; exit 1; fi; # Init and load the database @@ -125,106 +142,228 @@ if [ ! -x "${FILE_CHECK_SCRIPT}" ] ; then echo "$0:$LINENO: error: The file chec rm -rf "${DISTRIBUTION_TARGET_DIR}" -# Create the binary distribution - -echo "debug: Creating Mac OS X framework binary distribution '${DISTRIBUTION_ROOT_NAME}'." - export DISTRIBUTION_TEMP_BINARY_ROOT="${DISTRIBUTION_TEMP_BINARY_DIR}/${DISTRIBUTION_ROOT_NAME}"; - -rm -rf "${DISTRIBUTION_TEMP_BINARY_DIR}" -mkdir -p "${DISTRIBUTION_TEMP_BINARY_ROOT}" - -echo "debug: Copying release products to '${DISTRIBUTION_ROOT_NAME}'." - -"${RSYNC}" -a --cvs-exclude "${BUILD_DIR}/${CONFIGURATION}/RegexKit.framework" "${DISTRIBUTION_TEMP_BINARY_ROOT}" && \ - "${RSYNC}" -a --cvs-exclude "${BUILD_DIR}/${CONFIGURATION}/Documentation" "${DISTRIBUTION_TEMP_BINARY_ROOT}" && \ - "${RSYNC}" -a --cvs-exclude ChangeLog LICENSE README ReleaseNotes "${BUILD_DISTRIBUTION_DIR}/Documentation.html" "${DISTRIBUTION_TEMP_BINARY_ROOT}" -if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to copy release products."; exit 1; fi; - -if [ ${STRIP_INSTALLED_PRODUCT} == "YES" ]; then - echo "Stripping release products of debugging information." - strip -S "${DISTRIBUTION_TEMP_BINARY_ROOT}/RegexKit.framework/Versions/A/RegexKit" - if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to strip release products."; exit 1; fi; -fi - -# If SetFile is available, this adds some polish to the text files for Macintosh users. -# Specifically- Sets the type of file to TEXT so that double-clicking on the file works correctly - -if [ -x "${SYSTEM_DEVELOPER_TOOLS}/SetFile" ]; then - "${SYSTEM_DEVELOPER_TOOLS}/SetFile" -t 'TEXT' "${DISTRIBUTION_TEMP_BINARY_ROOT}/ChangeLog" - "${SYSTEM_DEVELOPER_TOOLS}/SetFile" -t 'TEXT' "${DISTRIBUTION_TEMP_BINARY_ROOT}/LICENSE" - "${SYSTEM_DEVELOPER_TOOLS}/SetFile" -t 'TEXT' "${DISTRIBUTION_TEMP_BINARY_ROOT}/README" - "${SYSTEM_DEVELOPER_TOOLS}/SetFile" -t 'TEXT' "${DISTRIBUTION_TEMP_BINARY_ROOT}/ReleaseNotes" -fi; - -# Check against the files database to make sure everything is the way we expect it to be. - -"${FILE_CHECK_SCRIPT}" "${DISTRIBUTION_SQL_DATABASE_FILE}" 'Binary' "${DISTRIBUTION_TEMP_BINARY_ROOT}" -if [ $? != 0 ]; then echo "$0:$LINENO: error: Binary distribution check failed."; exit 1; fi; - -create_tarball "${DISTRIBUTION_TEMP_BINARY_DIR}" "${DISTRIBUTION_BASE_FILE_NAME}.tar" "${DISTRIBUTION_TEMP_BINARY_DIR}" "${DISTRIBUTION_ROOT_NAME}" -if [ $? != 0 ]; then exit 1; fi; -create_dmg "${DISTRIBUTION_TEMP_BINARY_DIR}" "${DISTRIBUTION_BASE_FILE_NAME}.dmg" "${DISTRIBUTION_DMG_VOL_NAME}" "${DISTRIBUTION_ROOT_NAME}" "${DISTRIBUTION_DMG_CONVERT_OPTS}" "YES" -if [ $? != 0 ]; then exit 1; fi; - -echo "debug: Copying Mac OS X framework binary distribution bundles to '${DISTRIBUTION_TARGET_DIR}'." - -mkdir -p "${DISTRIBUTION_TARGET_DIR}" && \ - cd "${DISTRIBUTION_TEMP_BINARY_DIR}" && \ - "${RSYNC}" -a "${DISTRIBUTION_BASE_FILE_NAME}.dmg" *.tar.* "${DISTRIBUTION_TARGET_DIR}" -if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to copy release bundles."; exit 1; fi; -cd "${PROJECT_DIR}" - - -# Create the source distribution - -echo "debug: Creating the source distribution '${DISTRIBUTION_ROOT_SOURCE_NAME}'." - export DISTRIBUTION_TEMP_SOURCE_ROOT="${DISTRIBUTION_TEMP_SOURCE_DIR}/${DISTRIBUTION_ROOT_SOURCE_NAME}"; - -rm -rf "${DISTRIBUTION_TEMP_SOURCE_DIR}" -mkdir -p "${DISTRIBUTION_TEMP_SOURCE_ROOT}" - -echo "debug: Copying project source to '${DISTRIBUTION_TEMP_SOURCE_ROOT}'." -"${RSYNC}" -a --cvs-exclude \ - --exclude="\.*" \ - --exclude="*~" \ - --exclude="#*#" \ - --exclude="Source/Headers/RegexKit/pcre.h" \ - --exclude="Source/pcre" \ - ChangeLog LICENSE README README.MacOSX ReleaseNotes GNUstep Source "${BUILD_DIR}/${CONFIGURATION}/Documentation" \ - "${DISTRIBUTION_TEMP_SOURCE_ROOT}" && \ - "${RSYNC}" -a --cvs-exclude "${BUILD_DISTRIBUTION_DIR}/distribution_pcre.h" "${DISTRIBUTION_TEMP_SOURCE_ROOT}/Source/Headers/RegexKit/pcre.h" && \ - mkdir -p "${DISTRIBUTION_TEMP_SOURCE_ROOT}/${PROJECT_NAME}.xcodeproj/" && \ - "${RSYNC}" -a "${PROJECT_NAME}.xcodeproj/project.pbxproj" "${DISTRIBUTION_TEMP_SOURCE_ROOT}/${PROJECT_NAME}.xcodeproj/project.pbxproj" - -if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to copy project source to temporary build area."; exit 1; fi; - -# If SetFile is available, this adds some polish to the text files for Macintosh users. -# Specifically- Sets the type of file to TEXT so that double-clicking on the file works correctly - -if [ -x "${SYSTEM_DEVELOPER_TOOLS}/SetFile" ]; then - "${SYSTEM_DEVELOPER_TOOLS}/SetFile" -t 'TEXT' "${DISTRIBUTION_TEMP_SOURCE_ROOT}/ChangeLog" - "${SYSTEM_DEVELOPER_TOOLS}/SetFile" -t 'TEXT' "${DISTRIBUTION_TEMP_SOURCE_ROOT}/LICENSE" - "${SYSTEM_DEVELOPER_TOOLS}/SetFile" -t 'TEXT' "${DISTRIBUTION_TEMP_SOURCE_ROOT}/README" - "${SYSTEM_DEVELOPER_TOOLS}/SetFile" -t 'TEXT' "${DISTRIBUTION_TEMP_SOURCE_ROOT}/README.MacOSX" - "${SYSTEM_DEVELOPER_TOOLS}/SetFile" -t 'TEXT' "${DISTRIBUTION_TEMP_SOURCE_ROOT}/ReleaseNotes" +export CPUS=`sysctl -n hw.activecpu`; +export MAXLOAD=`expr "${CPUS}" + 2`; +if [ "${DISTRIBUTION_PARALLEL_BUILD}" == "YES" ] && (( ${CPUS} > 1 )); then + echo "$0:$LINENO: note: DISTRIBUTION_PARALLEL_BUILD == 'YES', number of active CPU's: ${CPUS} max load average: ${MAXLOAD}"; + "${MAKE}" -f "${MAKEFILE_DIST}" -j "${CPUS}" -l "${MAXLOAD}" build_tarballs +else + "${MAKE}" -f "${MAKEFILE_DIST}" build_tarballs fi; -# Check against the files database to make sure everything is the way we expect it to be. - -"${FILE_CHECK_SCRIPT}" "${DISTRIBUTION_SQL_DATABASE_FILE}" 'Source' "${DISTRIBUTION_TEMP_SOURCE_ROOT}" -if [ $? != 0 ]; then echo "$0:$LINENO: error: Source distribution check failed."; exit 1; fi; - - -create_tarball "${DISTRIBUTION_TEMP_SOURCE_DIR}" "${DISTRIBUTION_BASE_SOURCE_FILE_NAME}.tar" "${DISTRIBUTION_TEMP_SOURCE_DIR}" "${DISTRIBUTION_ROOT_SOURCE_NAME}" -if [ $? != 0 ]; then exit 1; fi; - -mkdir -p "${DISTRIBUTION_TARGET_DIR}" && \ - cd "${DISTRIBUTION_TEMP_SOURCE_DIR}" && \ - "${RSYNC}" -a *.tar.* "${DISTRIBUTION_TARGET_DIR}" -if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to copy source tarballs to distribution directory."; exit 1; fi; -cd "${PROJECT_DIR}" +# Not yet moved to Makefile.dist + +############################################################################### +echo "---------------" +echo "" +echo "$0:$LINENO: note: Creating Mac OS X Installer Package and .dmg." +echo "" +############################################################################### + +export DISTRIBUTION_TEMP_PACKAGEMAKER_DIR="${DISTRIBUTION_TEMP_PACKAGES_DIR}/Packagemaker" +export DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR="${DISTRIBUTION_TEMP_PACKAGEMAKER_DIR}/plists" +export DISTRIBUTION_TEMP_INSTALLER_PACKAGE="${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_ROOT_NAME}.mpkg" + +# Clean any previous attempts and prep staging area. +rm -rf "${DISTRIBUTION_TEMP_PACKAGES_DIR}" && \ + mkdir -p \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/${DOCUMENTAION_DOCSET_ID}" \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/Documentation" \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/RegexKit.framework" \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/Sourcecode" && \ + if [ "${DISTRIBUTION_INCLUDE_PCRE_PACKAGE}" == "YES" ]; then mkdir -p "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/pcre/Sourcecode/Source/pcre"; fi +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to delete the staging area from a previous build attempt."; exit 1; fi; + +# Make a copy of the various files we need for packaging (Source/Build/PackageMaker/*). +"${RSYNC}" -aCE --delete "${BUILD_PACKAGEMAKER_DIR}/" "${DISTRIBUTION_TEMP_PACKAGEMAKER_DIR}/" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Could not copy package resources to temporary staging area."; exit 1; fi; + +# And update our copy of the plists files with the current version information. +updatePackageInfoPlists "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Could not update packages Info.plist files with the current version."; exit 1; fi; + +# +# Create the staging area. +# Copy the two helper .html files (Documentation.html + Adding RegexKit to your Project.html) + build/Release/Documentation. +# and SetFile -a E on Adding RegexKit to your Project.html to get rid of the extension when viewed from the Finder. +# Copy build/Release/RegexKit.framework. +# and strip any debugging symbols from it. +# Copy the previously assembled Sourcecode directory from the source tarball build. +# Set the files to group + write. +# When `installed`, the user:group will be root:admin, thus allowing admin users to write to the directories/files. +# +# The reason why package grouping directories appear to be "doubled up" (ie, staging/RegexKit.framework/RegexKit.framework) +# is sort of goofy, but it's basically so that we can control what permissions the packages unarchive with. +# + +echo "$0:$LINENO: note: Copying files to the packaging staging area." +"${RSYNC}" -aCE "${TARGET_BUILD_DIR}/DocSet/${DOCUMENTAION_DOCSET_ID}/" "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/${DOCUMENTAION_DOCSET_ID}/${DOCUMENTAION_DOCSET_ID}" && \ + "${RSYNC}" -aCE "${BUILD_DISTRIBUTION_DIR}/Documentation.html" "${BUILD_DISTRIBUTION_DIR}/Adding RegexKit to your Project.html" "${DOCUMENTATION_TARGET_DIR}" "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/Documentation" && \ + "${SYSTEM_DEVELOPER_TOOLS}/SetFile" -a E "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/Documentation/Adding RegexKit to your Project.html" && \ + "${RSYNC}" -aCE "${TARGET_BUILD_DIR}/RegexKit.framework/" "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/RegexKit.framework/RegexKit.framework" && \ + strip -S "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/RegexKit.framework//RegexKit.framework/Versions/A/RegexKit" && \ + "${RSYNC}" -aCE "${DISTRIBUTION_TEMP_SOURCE_DIR}/Sourcecode/" "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/Sourcecode/Sourcecode" && \ + if [ "${DISTRIBUTION_INCLUDE_PCRE_PACKAGE}" == "YES" ]; then "${RSYNC}" -a "${PCRE_TARBALL_FILE_PATH}" "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/pcre/Sourcecode/Source/pcre/${PCRE_TARBALL_FILE_NAME}"; fi && \ + "${CHMOD}" -R g+w "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/Documentation" && \ + "${CHMOD}" -R g+w "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/Sourcecode" && \ + "${CHMOD}" -R g+w "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/com.zang.RegexKit.Documentation.docset" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to copy distribution files to staging area."; exit 1; fi; + +# +# Notes on PackageMaker package making... +# +# The -u flag tells PackageMaker to not gzip the Archive.pax file. We leave it uncompressed because we put the final .mpkg bundle on a .dmg disk image. +# The .dmg disk image is compressed with bzip2 (UDBZ). If PackageMaker gzip's it here, the resulting .dmg is ~60-70K larger because bzip2 is able +# to compress an uncompressed Archive.pax file better than a gunziped Archive.pax.gz. +# +# For the Documentation package we rebuild the .pax file completely to pick up the extension hiding SetFile -a E "Adding RegexKit to your Project.html" +# +# The odd perl scripts that alter the Archive.(pax|bom) output is the result of a compromise. +# +# What it does is set pax and bom files so that the user id and group ID are "0:80", aka "root:admin". +# +# One way to do it is to have root chown -R root:admin staging/ and let packagemaker/pax/cpio pick it up automatically. +# This, however, requires elevated privileges. Using `sudo` has its drawbacks if your credentials aren't cached and +# you haven't updated sudoers with a pattern to let the command execute automatically without prompting for a password. +# +# There's also `-e 'do shell script "chown -R root:admin staging/" with administrator privileges'`, which will prompt +# with the standard security framework dialog panel for a password. Certainly better when building interactively, +# but not ideal. +# +# Then there's the possibility that some malicous program could alter this script (or whatever script +# contains the elevated commands) and change it to execute some other commands at the elevated privilege. +# +# This way avoids all those pitfalls by simply re-writing the cpio .pax archive and bom file with the uid:gid pair +# we'd like to have when it un-archives, achieving the same result. +# + +echo "$0:$LINENO: note: Packaging RegexKit.framework." +"${CHMOD}" -h go-w "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/RegexKit.framework/RegexKit.framework/Headers" \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/RegexKit.framework/RegexKit.framework/RegexKit" \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/RegexKit.framework/RegexKit.framework/Resources" \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/RegexKit.framework/RegexKit.framework/Versions/Current" + +"${PACKAGEMAKER}" -build \ + -p "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_FRAMEWORK}" \ + -f "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/RegexKit.framework/" \ + -u \ + -ds \ + -i "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}/Framework_info.plist" \ + -d "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}/Framework_desc.plist" && \ + "${PERL}" -e 'while(<>) { s/(070707\d{18})(\d{12})(\d{40})/${1}000000000120${3}/g; print $_; }' -i "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_FRAMEWORK}/Contents/Archive.pax" && \ + if [ "${DISTRIBUTION_GZIP_PACKAGES}" == "YES" ]; then "${GZIP_CMD}" -n9 "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_FRAMEWORK}/Contents/Archive.pax" ; fi && \ + "${PERL}" -e 'while(<>) { s/\x0\x0\x1\xf5\x0\x0\x1\xf5/\x0\x0\x0\x0\x0\x0\x0\x50/g; print $_; }' -i "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_FRAMEWORK}/Contents/Archive.bom" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to create RegexKit.framework package."; exit 1; fi; + +echo "$0:$LINENO: note: Packaging HTML Documentation." +"${PACKAGEMAKER}" -build \ + -p "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_HTML_DOCUMENTATION}" \ + -f "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/Documentation" \ + -u \ + -ds \ + -i "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}/Documentation_info.plist" \ + -d "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}/Documentation_desc.plist" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to create HTML Documentation package."; exit 1; fi; + +# bogus package maker +# So, the packagemaker -build puts together a .pax file that strips off the SetFile -a E (hide extension) +# flag for whatever reason. So we re-build it here. +rm -f "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_HTML_DOCUMENTATION}/Contents/Archive.pax" && \ + cd "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/Documentation" && \ + pax -w -x cpio -f "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_HTML_DOCUMENTATION}/Contents/Archive.pax" . && \ + "${PERL}" -e 'while(<>) { s/(070707\d{18})(\d{12})(\d{40})/${1}000000000120${3}/g; print $_; }' -i "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_HTML_DOCUMENTATION}/Contents/Archive.pax" && \ + if [ "${DISTRIBUTION_GZIP_PACKAGES}" == "YES" ]; then "${GZIP_CMD}" -n9 "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_HTML_DOCUMENTATION}/Contents/Archive.pax" ; fi && \ + "${PERL}" -e 'while(<>) { s/\x0\x0\x1\xf5\x0\x0\x1\xf5/\x0\x0\x0\x0\x0\x0\x0\x50/g; print $_; }' -i "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_HTML_DOCUMENTATION}/Contents/Archive.bom" && \ + cd "${PROJECT_DIR}" && \ +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to re-pax HTML Documenation (hide extension dropped work-around)."; exit 1; fi; + +echo "$0:$LINENO: note: Packaging DocSet Documentation." +"${PACKAGEMAKER}" -build \ + -p "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_DOCSET_DOCUMENTATION}" \ + -f "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/${DOCUMENTAION_DOCSET_ID}/" \ + -u \ + -ds \ + -i "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}/DocSet_info.plist" \ + -d "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}/DocSet_desc.plist" && \ + "${PERL}" -e 'while(<>) { s/(070707\d{18})(\d{12})(\d{40})/${1}000000000120${3}/g; print $_; }' -i "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_DOCSET_DOCUMENTATION}/Contents/Archive.pax" && \ + if [ "${DISTRIBUTION_GZIP_PACKAGES}" == "YES" ]; then "${GZIP_CMD}" -n9 "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_DOCSET_DOCUMENTATION}/Contents/Archive.pax" ; fi && \ + "${PERL}" -e 'while(<>) { s/\x0\x0\x1\xf5\x0\x0\x1\xf5/\x0\x0\x0\x0\x0\x0\x0\x50/g; print $_; }' -i "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_DOCSET_DOCUMENTATION}/Contents/Archive.bom" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to create DocSet Documentation package."; exit 1; fi; + +echo "$0:$LINENO: note: Packaging sourcecode." +"${PACKAGEMAKER}" -build \ + -p "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_SOURCECODE}" \ + -f "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/Sourcecode/" \ + -u \ + -ds \ + -i "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}/Sourcecode_info.plist" \ + -d "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}/Sourcecode_desc.plist" && \ + "${PERL}" -e 'while(<>) { s/(070707\d{18})(\d{12})(\d{40})/${1}000000000120${3}/g; print $_; }' -i "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_SOURCECODE}/Contents/Archive.pax" && \ + if [ "${DISTRIBUTION_GZIP_PACKAGES}" == "YES" ]; then "${GZIP_CMD}" -n9 "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_SOURCECODE}/Contents/Archive.pax" ; fi && \ + "${PERL}" -e 'while(<>) { s/\x0\x0\x1\xf5\x0\x0\x1\xf5/\x0\x0\x0\x0\x0\x0\x0\x50/g; print $_; }' -i "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_SOURCECODE}/Contents/Archive.bom" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to create sourcecode package."; exit 1; fi; + +if [ "${DISTRIBUTION_INCLUDE_PCRE_PACKAGE}" == "YES" ]; then + echo "$0:$LINENO: note: Packaging PCRE distribution." + "${PACKAGEMAKER}" -build \ + -p "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_SOURCECODE_PCRE}" \ + -f "${DISTRIBUTION_TEMP_PACKAGES_DIR}/staging/pcre/" \ + -u \ + -ds \ + -i "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}/pcre_info.plist" \ + -d "${DISTRIBUTION_TEMP_PACKAGE_PLISTS_DIR}/pcre_desc.plist" && \ + "${PERL}" -e 'while(<>) { s/(070707\d{18})(\d{12})(\d{40})/${1}000000000120${3}/g; print $_; }' -i "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_SOURCECODE_PCRE}/Contents/Archive.pax" && \ + if [ "${DISTRIBUTION_GZIP_PACKAGES}" == "YES" ]; then "${GZIP_CMD}" -n9 "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_SOURCECODE_PCRE}/Contents/Archive.pax" ; fi && \ + "${PERL}" -e 'while(<>) { s/\x0\x0\x1\xf5\x0\x0\x1\xf5/\x0\x0\x0\x0\x0\x0\x0\x50/g; print $_; }' -i "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_SOURCECODE_PCRE}/Contents/Archive.bom" + if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to create PCRE distribution package."; exit 1; fi; +fi +# This creates/replicates the layout that packagemaker would have created. +# For whatever reason, when I would supply `packagemaker` with the .pmproj for the complete distribution, it would always segfault. +# So, we do it this way. +echo "$0:$LINENO: note: Creating installer package." +mkdir -p "${DISTRIBUTION_TEMP_INSTALLER_PACKAGE}/Contents/Packages" && \ + "${RSYNC}" -aC "${DISTRIBUTION_TEMP_PACKAGEMAKER_DIR}/Resources/" "${DISTRIBUTION_TEMP_INSTALLER_PACKAGE}/Contents/Resources/" && \ + "${FIND}" "${DISTRIBUTION_TEMP_INSTALLER_PACKAGE}/Contents/Resources" -type f -exec "${CHMOD}" 555 {} \; && \ + "${RSYNC}" -aC "${DISTRIBUTION_TEMP_PACKAGEMAKER_DIR}/plists/RegexKit_mpkg_info.plist" "${DISTRIBUTION_TEMP_INSTALLER_PACKAGE}/Contents/Info.plist" && \ + "${RSYNC}" -aC \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_FRAMEWORK}" \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_HTML_DOCUMENTATION}" \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_DOCSET_DOCUMENTATION}" \ + "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_SOURCECODE}" \ + "${DISTRIBUTION_TEMP_INSTALLER_PACKAGE}/Contents/Packages" && \ + if [ "${DISTRIBUTION_INCLUDE_PCRE_PACKAGE}" == "YES" ]; then \ + "${RSYNC}" -aC "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_PACKAGE_SOURCECODE_PCRE}" "${DISTRIBUTION_TEMP_INSTALLER_PACKAGE}/Contents/Packages"; \ + fi +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to copy files in to final installer package."; exit 1; fi; + +# PACKAGEDIST_SCRIPT creates the installer 'distribution.dist' installer script file. +# PackageMaker was used to create the first iteration of the distribution.dist file which was then cleaned up +# and placed in to the perl script. The perl script extracts information from the three previously +# created packages and substitutes their values in the right places in the generated .dist file. +# Most importantly it extracts the .pkg versions and installation sizes. +"${PACKAGEDIST_SCRIPT}" > "${DISTRIBUTION_TEMP_INSTALLER_PACKAGE}/Contents/distribution.dist" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to create installer distribution.dist script."; exit 1; fi; + +# Copy the completed .mpkg to the final build/Release/Distribution location. +"${RSYNC}" -aCE "${DISTRIBUTION_TEMP_INSTALLER_PACKAGE}" "${DISTRIBUTION_TARGET_DIR}" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to copy Installer Package to distribution directory."; exit 1; fi; + +# Copy our completed .mpkg to the .dmg staging area and then create the .dmg. +mkdir "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_ROOT_NAME}" && \ + "${RSYNC}" -aCE "${DISTRIBUTION_TEMP_INSTALLER_PACKAGE}" "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_ROOT_NAME}" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to copy Installer Package to .dmg staging area."; exit 1; fi; + +# Create the Mac OS X Installer .dmg +create_dmg "${DISTRIBUTION_TEMP_PACKAGES_DIR}" "${DISTRIBUTION_BASE_FILE_NAME}.dmg" "${DISTRIBUTION_DMG_VOL_NAME}" "${DISTRIBUTION_ROOT_NAME}" "${DISTRIBUTION_DMG_CONVERT_OPTS}" "YES" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Error creating '${DISTRIBUTION_BASE_FILE_NAME}.dmg' disk image."; exit 1; fi; + +# Copy the completed .dmg to the final build/Release/Distribution location. +"${RSYNC}" -aCE "${DISTRIBUTION_TEMP_PACKAGES_DIR}/${DISTRIBUTION_BASE_FILE_NAME}.dmg" "${DISTRIBUTION_TARGET_DIR}" +if [ $? != 0 ]; then echo "$0:$LINENO: error: Unable to copy Installer Package .dmg to distribution directory."; exit 1; fi; + +echo "$0:$LINENO: note: Distribution target completed successfully." exit 0; diff --git a/Source/Build/Scripts/buildPCRE.sh b/Source/Build/Scripts/buildPCRE.sh index 45f80b9..d068d71 100755 --- a/Source/Build/Scripts/buildPCRE.sh +++ b/Source/Build/Scripts/buildPCRE.sh @@ -3,7 +3,7 @@ MAKE=${MAKE:?"Environment variable MAKE must exist, aborting."}; MAKEFILE_PCRE=${MAKEFILE_PCRE:?"Environment variable MAKEFILE_PCRE must exist, aborting."}; -if [ ! -f "${MAKEFILE_PCRE}" ]; then echo "$0: $LINENO: error: The Makefile to build PCRE, '${MAKEFILE_PCRE}', does not exist, aborting." exit 1; fi; +if [ ! -f "${MAKEFILE_PCRE}" ]; then echo "$0:$LINENO: error: The Makefile to build PCRE, '${MAKEFILE_PCRE}', does not exist, aborting." exit 1; fi; # Determine if there has been a change that requires the pcre library to be cleaned. if [ -f "${PCRE_BUILT_WITH_MAKEFILE}" ]; then DIFFERENT_MAKEFILE=`diff -q "${MAKEFILE_PCRE}" "${PCRE_BUILT_WITH_MAKEFILE}"`; fi; @@ -11,16 +11,16 @@ if [ -f "${PCRE_BUILT_WITH_SCRIPT}" ]; then DIFFERENT_SCRIPT=`diff -q "$0" " eval "${PCRE_BUILT_WITH_ENV_CMD}" > "${PCRE_BUILT_WITH_ENV_FILE}_now" if [ -f "${PCRE_BUILT_WITH_ENV_FILE}" ]; then DIFFERENT_ENV=`diff -q "${PCRE_BUILT_WITH_ENV_FILE}" "${PCRE_BUILT_WITH_ENV_FILE}_now"`; fi; -if [ "${DIFFERENT_ENV}" != "" ]; then echo "debug: The build environment variables have changed since building the pcre library."; NEEDS_CLEANING="Yes"; -elif [ "${DIFFERENT_SCRIPT}" != "" ]; then echo "debug: The build script '${PCRE_BUILD_SCRIPT}' has changed since building the pcre library."; NEEDS_CLEANING="Yes"; -elif [ "${DIFFERENT_MAKEFILE}" != "" ]; then echo "debug: The makefile '${MAKEFILE_PCRE}' has changed since building the pcre library."; NEEDS_CLEANING="Yes"; +if [ "${DIFFERENT_ENV}" != "" ]; then echo "$0:$LINENO: note: The build environment variables have changed since building the pcre library."; NEEDS_CLEANING="Yes"; +elif [ "${DIFFERENT_SCRIPT}" != "" ]; then echo "$0:$LINENO: note: The build script '${PCRE_BUILD_SCRIPT}' has changed since building the pcre library."; NEEDS_CLEANING="Yes"; +elif [ "${DIFFERENT_MAKEFILE}" != "" ]; then echo "$0:$LINENO: note: The makefile '${MAKEFILE_PCRE}' has changed since building the pcre library."; NEEDS_CLEANING="Yes"; fi; # Invoke Makefile.pcre with the 'clean' if needed. -if [ -r "PCRE_MAKE_OVERRIDE" ] && [ "$NEEDS_CLEANING" == "Yes" ]; then +if [ -r "PCRE_MAKE_OVERRIDE" ] && [ "${NEEDS_CLEANING}" == "Yes" ]; then echo "$0:$LINENO: warning: The file 'PCRE_MAKE_OVERRIDE' exists but PCRE cleaning required, skipping clean."; else - if [ "$NEEDS_CLEANING" == "Yes" ]; then ${MAKE} -f "${MAKEFILE_PCRE}" clean; fi; + if [ "${NEEDS_CLEANING}" == "Yes" ]; then "${MAKE}" -f "${MAKEFILE_PCRE}" clean; fi; fi # Create the directory we use for all our temporary files. @@ -28,10 +28,17 @@ if [ ! -d "${PCRE_TEMP_ROOT}" ]; then mkdir -p "${PCRE_TEMP_ROOT}"; fi # Copy the environment variables, script (this script), and Makefile used to build the pcre library. if [ ! -f "${PCRE_BUILT_WITH_ENV_FILE}" ]; then eval "${PCRE_BUILT_WITH_ENV_CMD}" > "${PCRE_BUILT_WITH_ENV_FILE}"; fi; -if [ ! -f "${PCRE_BUILT_WITH_SCRIPT}" ]; then cp "$0" "${PCRE_BUILT_WITH_SCRIPT}"; fi; -if [ ! -f "${PCRE_BUILT_WITH_MAKEFILE}" ]; then cp "${MAKEFILE_PCRE}" "${PCRE_BUILT_WITH_MAKEFILE}"; fi; +if [ ! -f "${PCRE_BUILT_WITH_SCRIPT}" ]; then "${CP}" "$0" "${PCRE_BUILT_WITH_SCRIPT}"; fi; +if [ ! -f "${PCRE_BUILT_WITH_MAKEFILE}" ]; then "${CP}" "${MAKEFILE_PCRE}" "${PCRE_BUILT_WITH_MAKEFILE}"; fi; # Finally, invoke Makefile.pcre with ${ACTION} (which is nearly always 'build'). -exec ${MAKE} -f "${MAKEFILE_PCRE}" ${ACTION}; - +export CPUS=`sysctl -n hw.activecpu`; +if [ "${PCRE_PARALLEL_BUILD}" == "YES" ] && (( ${CPUS} > 1 )); then + export MAXLOAD=`expr "${CPUS}" + 2`; + echo "$0:$LINENO: note: PCRE_PARALLEL_BUILD == 'YES', number of active CPU's: ${CPUS} max load average: ${MAXLOAD}"; + exec "${MAKE}" -f "${MAKEFILE_PCRE}" -j "${CPUS}" -l "${MAXLOAD}" ${ACTION}; +else +# echo "$0:$LINENO: note: PCRE_PARALLEL_BUILD != 'YES', using non-parallel, sequential make to build PCRE."; + exec "${MAKE}" -f "${MAKEFILE_PCRE}" ${ACTION}; +fi; diff --git a/Source/Build/Scripts/fileCheck.pl b/Source/Build/Scripts/fileCheck.pl index 8719e9c..3a2c543 100755 --- a/Source/Build/Scripts/fileCheck.pl +++ b/Source/Build/Scripts/fileCheck.pl @@ -69,12 +69,16 @@ if($#master_names != -1) { printf("warning: There are %d files missing from the '$clusterName' distribution directory.\n", $#master_names +1); - print("Files: " . join(", ", @master_names) . "\n"); + my ($cutoff, @names) = (""); + if($#master_names > 4) { for(my $x=0; $x<5; $x++) { $names[$x] = $master_names[$x]; } $cutoff = " ... (Remaining " . ($#master_names - 4) . " cut off)"; } else { @names = @master_names; } + print("Files: " . join(", ", @names) . "$cutoff\n"); } if($#verify_names != -1) { printf("warning: There are %d unknown, extra files in the '$clusterName' distribution directory.\n", $#verify_names +1); - print("Files: " . join(", ", @verify_names) . "\n"); + my ($cutoff, @names) = (""); + if($#verify_names > 4) { for(my $x=0; $x<5; $x++) { $names[$x] = $verify_names[$x]; } $cutoff = " ... (Remaining " . ($#verify_names - 4) . " cut off)"; } else { @names = @verify_names; } + print("Files: " . join(", ", @names) . "$cutoff\n"); } if(($dbh->selectall_arrayref("SELECT count(*) FROM cluster WHERE created < datetime('now', '-15 minutes') AND type != 'Master'"))->[0]->[0]) { diff --git a/Source/Build/Scripts/packageDist.pl b/Source/Build/Scripts/packageDist.pl new file mode 100755 index 0000000..35fd2b2 --- /dev/null +++ b/Source/Build/Scripts/packageDist.pl @@ -0,0 +1,190 @@ +#!/usr/bin/perl -w + +use strict; +require Foundation; + +my $NSStrings; + +my $dictionaries = + { 'framework' => NSDictionary->dictionaryWithContentsOfFile_(nsstring("$ENV{'DISTRIBUTION_TEMP_PACKAGES_DIR'}/$ENV{'DISTRIBUTION_PACKAGE_FRAMEWORK'}/Contents/Info.plist")), + 'htmlDocumentation' => NSDictionary->dictionaryWithContentsOfFile_(nsstring("$ENV{'DISTRIBUTION_TEMP_PACKAGES_DIR'}/$ENV{'DISTRIBUTION_PACKAGE_HTML_DOCUMENTATION'}/Contents/Info.plist")), + 'docsetDocumentation' => NSDictionary->dictionaryWithContentsOfFile_(nsstring("$ENV{'DISTRIBUTION_TEMP_PACKAGES_DIR'}/$ENV{'DISTRIBUTION_PACKAGE_DOCSET_DOCUMENTATION'}/Contents/Info.plist")), + 'sourcecode' => NSDictionary->dictionaryWithContentsOfFile_(nsstring("$ENV{'DISTRIBUTION_TEMP_PACKAGES_DIR'}/$ENV{'DISTRIBUTION_PACKAGE_SOURCECODE'}/Contents/Info.plist")) + }; + +my $packages = + { 'framework' => getPackageInfo($dictionaries->{'framework'}, "$ENV{'DISTRIBUTION_PACKAGE_FRAMEWORK'}"), + 'htmlDocumentation' => getPackageInfo($dictionaries->{'htmlDocumentation'}, "$ENV{'DISTRIBUTION_PACKAGE_HTML_DOCUMENTATION'}"), + 'docsetDocumentation' => getPackageInfo($dictionaries->{'docsetDocumentation'}, "$ENV{'DISTRIBUTION_PACKAGE_DOCSET_DOCUMENTATION'}"), + 'sourcecode' => getPackageInfo($dictionaries->{'sourcecode'}, "$ENV{'DISTRIBUTION_PACKAGE_SOURCECODE'}") + }; + +my ($pcreLineChoice, $pcreChoice, $pcrePkgRef, $pcreScripts) = ("", "", "", ""); + +if(defined($ENV{'DISTRIBUTION_INCLUDE_PCRE_PACKAGE'}) && ($ENV{'DISTRIBUTION_INCLUDE_PCRE_PACKAGE'} eq "YES")) { + $dictionaries->{'pcre'} = NSDictionary->dictionaryWithContentsOfFile_(nsstring("$ENV{'DISTRIBUTION_TEMP_PACKAGES_DIR'}/$ENV{'DISTRIBUTION_PACKAGE_SOURCECODE_PCRE'}/Contents/Info.plist")); + $packages->{'pcre'} = getPackageInfo($dictionaries->{'pcre'}, "$ENV{'DISTRIBUTION_PACKAGE_SOURCECODE_PCRE'}"); + + $pcreLineChoice = ""; + $pcreChoice = < + + +PCRE_CHOICE + $pcrePkgRef = "$packages->{'pcre'}->{'pkgRef'}"; + $pcreScripts = < +function checkPcreEnabled() { + if(choices.sourcecodeChoice.selected == false) { choices.pcreChoice.tooltip = 'Can only be installed with the RegexKit Source Code'; return(false); } + else { choices.pcreChoice.tooltip = 'PCRE tarball distribution'; return(true); } +} + +PCRE_SCRIPTS + +} + +# +# +# +# + +print < + + RegexKit + + + + + + + + + + + + +$pcreScripts + + + + + + $pcreLineChoice + + + + + + + + + + + + + + $pcreChoice + $packages->{'framework'}->{'pkgRef'} + $packages->{'htmlDocumentation'}->{'pkgRef'} + $packages->{'docsetDocumentation'}->{'pkgRef'} + $packages->{'sourcecode'}->{'pkgRef'} + $pcrePkgRef + +END_OF_DIST + +exit(0); + +sub nsstring { + my $string = shift; + + if(!defined($Main::NSStrings->{"$string"})) { $Main::NSStrings->{"$string"} = NSString->stringWithCString_("$string"); } + return($Main::NSStrings->{"$string"}); +} + +sub stringForKey { + my $dictionary = shift; + my $key = shift; + my $string = $dictionary->objectForKey_(nsstring($key)); + + if($$string == 0) { return(undef); } + return(sprintf("%s", $string->description->cString)); +} + +sub getPackageInfo { + my $dictionary = shift; + my $filename = shift; + + my $pkgInfo = + { + 'CFBundleIdentifier' => stringForKey($dictionary, "CFBundleIdentifier"), + 'CFBundleShortVersionString' => stringForKey($dictionary, "CFBundleShortVersionString"), + 'IFMajorVersion' => stringForKey($dictionary, "IFMajorVersion"), + 'IFMinorVersion' => stringForKey($dictionary, "IFMinorVersion"), + 'IFPkgFlagInstalledSize' => stringForKey($dictionary, "IFPkgFlagInstalledSize") + }; + + $pkgInfo->{'version'} = "$pkgInfo->{'CFBundleShortVersionString'}.$pkgInfo->{'IFMajorVersion'}.$pkgInfo->{'IFMinorVersion'}"; + + $pkgInfo->{'pkgRef'} = "{'CFBundleIdentifier'}\" version=\"$pkgInfo->{'version'}\" installKBytes=\"$pkgInfo->{'IFPkgFlagInstalledSize'}\" auth=\"Admin\" onConclusion=\"None\">file:./Contents/Packages/$filename"; + + return($pkgInfo); +} diff --git a/Source/Build/Scripts/plistUtil.pl b/Source/Build/Scripts/plistUtil.pl new file mode 100755 index 0000000..e08cb38 --- /dev/null +++ b/Source/Build/Scripts/plistUtil.pl @@ -0,0 +1,21 @@ +#!/usr/bin/perl -w + +use strict; +require Foundation; + +if($#ARGV != 2) { print("Usage: FILE KEY VALUE\n"); exit(1); } + +my $fileNameString = NSString->stringWithCString_($ARGV[0]); +my $keyString = NSString->stringWithCString_($ARGV[1]); +my $valueString = NSString->stringWithCString_($ARGV[2]); + +if(($$fileNameString == 0) || ($$keyString == 0) || ($$valueString == 0)) { print("CLI arguments turned in to a null NSString?\n"); exit(1); } + +my $dict = NSMutableDictionary->dictionaryWithContentsOfFile_($fileNameString); + +if($$dict == 0) { print("NSMutableDictionary returned NULL.\n"); exit(1); } + +$dict->setObject_forKey_($valueString, $keyString); +if($dict->writeToFile_atomically_($fileNameString, 1) == 0) { print("dictionary writeToFile returned NO."); exit(1); } + +exit(0); diff --git a/Source/Build/Scripts/stripHeaderdoc.sh b/Source/Build/Scripts/stripHeaderdoc.sh index 601048a..0d66ae6 100755 --- a/Source/Build/Scripts/stripHeaderdoc.sh +++ b/Source/Build/Scripts/stripHeaderdoc.sh @@ -9,8 +9,6 @@ echo "Headerdoc comment stripper." FIND=${FIND:?"error: Environment variable FIND must exist, aborting."} PERL=${PERL:?"error: Environment variable PERL must exist, aborting."} -SHELL=${PERL:?"error: Environment variable SHELL must exist, aborting."} -SED=${SED:?"error: Environment variable SED must exist, aborting."} PUBLIC_HEADERS_DIR="${TARGET_BUILD_DIR}/${PUBLIC_HEADERS_FOLDER_PATH}" PUBLIC_HEADERS_FOLDER_PATH=${PUBLIC_HEADERS_FOLDER_PATH:?"error: Environment variable PUBLIC_HEADERS_FOLDER_PATH must exist, aborting."} TARGET_BUILD_DIR=${TARGET_BUILD_DIR:?"error: Environment variable TARGET_BUILD_DIR must exist, aborting."} @@ -20,29 +18,30 @@ TMP_FILE="${TEMP_FILES_DIR}/headerdoc_striping.h" if [ ! -x "${FIND}" ]; then echo "$0:$LINENO: error: The FIND command, '${FIND}', does not exist, aborting."; exit 1; fi; if [ ! -x "${PERL}" ]; then echo "$0:$LINENO: error: The PERL command, '${PERL}', does not exist, aborting."; exit 1; fi; -if [ ! -x "${SHELL}" ]; then echo "$0:$LINENO: error: The SHELL command, '${SHELL}', does not exist, aborting."; exit 1; fi; -if [ ! -x "${SED}" ]; then echo "$0:$LINENO: error: The SED command, '${SED}', does not exist, aborting."; exit 1; fi; if [ ! -d "${TARGET_BUILD_DIR}" ]; then echo "$0:$LINENO: error: The TARGET_BUILD_DIR, '${TARGET_BUILD_DIR}', does not exist, aborting."; exit 1; fi; if [ ! -d "${PUBLIC_HEADERS_DIR}" ]; then echo "$0:$LINENO: error: The PUBLIC_HEADERS_DIR, '${PUBLIC_HEADERS_DIR}', does not exist, aborting."; exit 1; fi; if [ ! -d "${TEMP_FILES_DIR}" ]; then echo "$0:$LINENO: error: The TEMP_FILES_DIR, '${TEMP_FILES_DIR}', does not exist, aborting."; exit 1; fi; if [ -f "${TIMESTAMP_FILE}" ]; then -# PUBLIC_HEADERS=`"${FIND}" "${PUBLIC_HEADERS_DIR}" -name '*.h' -newer "${TIMESTAMP_FILE}" -exec "${SHELL}" -c "echo {} | ${SED} -e 's/ /\\\\\\_/g'" \;` PUBLIC_HEADERS=`"${FIND}" "${PUBLIC_HEADERS_DIR}" -name '*.h' -newer "${TIMESTAMP_FILE}"` else PUBLIC_HEADERS=`"${FIND}" "${PUBLIC_HEADERS_DIR}" -name '*.h'` fi for HEADER in ${PUBLIC_HEADERS}; do -# HEADER=`echo $HEADER | ${SED} -e 's/\\\\_/ /g'` "${PERL}" -e 'while(<>) { $in = $in . $_; } $in =~ s/\n\s*?\/\*\!.*?\*\///sg; print $in;' "${HEADER}" > "${TMP_FILE}" mv "${TMP_FILE}" "${HEADER}" + export HEADER + HEADER_FILE=`"${PERL}" -e '($x = "$ENV{HEADER}") =~ /\/?([^\/]+)$/; print($1);'` + if [ "${PROJECT_HEADERS_DIR}" != "" ]; then + touch -r "${PROJECT_HEADERS_DIR}/${HEADER_FILE}" "${HEADER}" + fi done; if [ "${PUBLIC_HEADERS}" = "" ]; then - echo "debug: All headers are up to date." + echo "$0:$LINENO: note: All headers are up to date." else - echo "debug: Headerdoc comments stripped." + echo "$0:$LINENO: note: Headerdoc comments stripped." touch "${TIMESTAMP_FILE}" fi diff --git a/Source/Build/Xcode/RegexKit Build Settings.xcconfig b/Source/Build/Xcode/RegexKit Build Settings.xcconfig index 7b8332c..bebfb10 100644 --- a/Source/Build/Xcode/RegexKit Build Settings.xcconfig +++ b/Source/Build/Xcode/RegexKit Build Settings.xcconfig @@ -20,65 +20,79 @@ REGEXKIT_XCODE_CONFIG_FILE = ${BUILD_SOURCE_DIR}/Xcode/RegexKit\ Project.xcconfi // Project version information -PROJECT_VERSION_MAJOR = 0 -PROJECT_VERSION_MINOR = 2 -PROJECT_VERSION_POINT = 0 +PROJECT_VERSION_MAJOR = 0 +PROJECT_VERSION_MINOR = 3 +PROJECT_VERSION_POINT = 0 -PROJECT_CURRENT_VERSION = ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_POINT} -PROJECT_COMPATIBLE_VERSION = 0.1.0 +PROJECT_CURRENT_VERSION = ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_POINT} +PROJECT_COMPATIBLE_VERSION = 0.3.0 + +// Enable parallel building where possible + +PARALLEL_BUILD = YES + +// The version of Mac OS X we are targeting + +SDKROOT = /Developer/SDKs/MacOSX10.5.sdk +ARCHS = ppc ppc64 i386 x86_64 + +// MACOSX_DEPLOYMENT_TARGET is also set in Makefile.pcre, ppc & i386 @ 10.4, ppc64 & x86_64 @ 10.5 + +MACOSX_DEPLOYMENT_TARGET_ppc = 10.4 +MACOSX_DEPLOYMENT_TARGET_i386 = 10.4 +MACOSX_DEPLOYMENT_TARGET_ppc64 = 10.5 +MACOSX_DEPLOYMENT_TARGET_x86_64 = 10.5 // File that contains the symbols we export for the 'RegexKit Framework' target. -PROJECT_EXPORTED_SYMBOLS_FILE = ${BUILD_XCODE_DIR}/projectExportedSymbols +PROJECT_EXPORTED_SYMBOLS_FILE = ${BUILD_XCODE_DIR}/projectExportedSymbols // Framework header information. -PROJECT_HEADERS_ROOT = Source/Headers -PROJECT_HEADERS_DIR = ${PROJECT_HEADERS_ROOT}/${PROJECT_NAME} +PROJECT_HEADERS_ROOT = Source/Headers +PROJECT_HEADERS_DIR = ${PROJECT_HEADERS_ROOT}/${PROJECT_NAME} // // Overall build / compiler settings. // -COPY_PHASE_STRIP = NO -PREBINDING = NO -ZERO_LINK = NO +COPY_PHASE_STRIP = NO +PREBINDING = NO +ZERO_LINK = NO -MACOSX_DEPLOYMENT_TARGET = 10.4 -SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk -STRIP_INSTALLED_PRODUCT = NO -STRIP_STYLE = debugging +STRIP_INSTALLED_PRODUCT = NO +STRIP_STYLE = debugging // GCC build settings. -DEBUG_INFORMATION_FORMAT = dwarf -GCC_DEBUGGING_SYMBOLS = full -GCC_GENERATE_DEBUGGING_SYMBOLS = YES -GCC_ENABLE_SYMBOL_SEPARATION = NO +DEBUG_INFORMATION_FORMAT = dwarf +GCC_DEBUGGING_SYMBOLS = full +GCC_GENERATE_DEBUGGING_SYMBOLS = YES +GCC_ENABLE_SYMBOL_SEPARATION = NO -GCC_OPTIMIZATION_LEVEL = z -GCC_C_LANGUAGE_STANDARD = gnu99 +GCC_OPTIMIZATION_LEVEL = z +GCC_C_LANGUAGE_STANDARD = gnu99 -GCC_ENABLE_CPP_EXCEPTIONS = NO -GCC_ENABLE_CPP_RTTI = NO -GCC_ENABLE_OBJC_EXCEPTIONS = YES -GCC_ENABLE_PASCAL_STRINGS = NO -GCC_FAST_OBJC_DISPATCH = YES +GCC_ENABLE_CPP_EXCEPTIONS = NO +GCC_ENABLE_CPP_RTTI = NO +GCC_ENABLE_OBJC_EXCEPTIONS = YES +GCC_ENABLE_PASCAL_STRINGS = NO +GCC_FAST_OBJC_DISPATCH = YES GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES -GCC_INLINES_ARE_PRIVATE_EXTERN = YES -GCC_MODEL_TUNING = G4 -GCC_PRECOMPILE_PREFIX_HEADER = YES -GCC_PREFIX_HEADER = Source/RegexKit_Prefix.pch - -GCC_WARN_ABOUT_RETURN_TYPE = YES -GCC_WARN_CHECK_SWITCH_STATEMENTS = YES -GCC_WARN_SHADOW = YES -GCC_WARN_SIGN_COMPARE = YES -GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES -GCC_WARN_UNUSED_FUNCTION = YES -GCC_WARN_UNUSED_PARAMETER = YES -GCC_WARN_UNUSED_VALUE = YES -GCC_WARN_UNUSED_VARIABLE = YES +GCC_INLINES_ARE_PRIVATE_EXTERN = YES +GCC_MODEL_TUNING = G4 +GCC_PRECOMPILE_PREFIX_HEADER = YES +GCC_PREFIX_HEADER = Source/RegexKit_Prefix.pch + +GCC_WARN_ABOUT_RETURN_TYPE = YES +GCC_WARN_CHECK_SWITCH_STATEMENTS = YES +GCC_WARN_SHADOW = YES +GCC_WARN_SIGN_COMPARE = YES +GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES +GCC_WARN_UNUSED_FUNCTION = YES +GCC_WARN_UNUSED_PARAMETER = YES +GCC_WARN_UNUSED_VALUE = YES +GCC_WARN_UNUSED_VARIABLE = YES // Executables used by scripts. @@ -180,6 +194,8 @@ PCRE_BUILT_WITH_ENV_FILE = ${PCRE_TEMP_ROOT}/built_with_env / PCRE_BUILT_WITH_SCRIPT = ${PCRE_TEMP_ROOT}/built_with_script // Contains a copy of ${PCRE_BUILD_SCRIPT} that was used to build the pcre library. PCRE_BUILT_WITH_MAKEFILE = ${PCRE_TEMP_ROOT}/built_with_makefile // Contains a copy of ${MAKEFILE_PCRE} that was used to build the pcre library. +PCRE_PARALLEL_BUILD = ${PARALLEL_BUILD} // Allow `make` to build the PCRE target with up to hw.activecpu jobs at once. + // // Settings that have to do with files in the 'Build/' directory. // @@ -187,16 +203,20 @@ PCRE_BUILT_WITH_MAKEFILE = ${PCRE_TEMP_ROOT}/built_with_makefile / BUILD_SOURCE_DIR = Source/Build BUILD_DISTRIBUTION_DIR = ${BUILD_SOURCE_DIR}/Distribution BUILD_MAKEFILE_DIR = ${BUILD_SOURCE_DIR}/Makefiles +BUILD_PACKAGEMAKER_DIR = ${BUILD_SOURCE_DIR}/Packagemaker BUILD_SCRIPTS_DIR = ${BUILD_SOURCE_DIR}/Scripts BUILD_SQL_DIR = ${BUILD_SOURCE_DIR}/SQL BUILD_XCODE_DIR = ${BUILD_SOURCE_DIR}/Xcode +MAKEFILE_DIST = ${BUILD_MAKEFILE_DIR}/Makefile.dist MAKEFILE_PCRE = ${BUILD_MAKEFILE_DIR}/Makefile.pcre BUILD_DISTRIBUTION_SCRIPT = ${BUILD_SCRIPTS_DIR}/buildDistribution.sh BUILD_PCRE_SCRIPT = ${BUILD_SCRIPTS_DIR}/buildPCRE.sh STRIP_HEADERDOC_SCRIPT = ${BUILD_SCRIPTS_DIR}/stripHeaderdoc.sh FILE_CHECK_SCRIPT = ${BUILD_SCRIPTS_DIR}/fileCheck.pl +PLISTUTIL_SCRIPT = ${BUILD_SCRIPTS_DIR}/plistUtil.pl +PACKAGEDIST_SCRIPT = ${BUILD_SCRIPTS_DIR}/packageDist.pl // When the source distribution is built, the Source/Headers/RegexKit/pcre.h // file that was copied from the pcre distribution is NOT copied in to the @@ -213,7 +233,6 @@ BUILD_DISTRIBUTION_TEMP_PCRE_HEADER_FILE = ${BUILD_DISTRIBUTION_DIR}/distributio DOCUMENTATION_SOURCE_DIR = Source/Documentation DOCUMENTATION_MISC_DIR = ${DOCUMENTATION_SOURCE_DIR}/Misc -DOCUMENTATION_README_DIR = ${DOCUMENTATION_SOURCE_DIR}/README DOCUMENTATION_RESOURCES_DIR = ${DOCUMENTATION_SOURCE_DIR}/Resources DOCUMENTATION_SCRIPTS_DIR = ${DOCUMENTATION_SOURCE_DIR}/Scripts DOCUMENTATION_SQL_DIR = ${DOCUMENTATION_SOURCE_DIR}/SQL @@ -221,18 +240,29 @@ DOCUMENTATION_TARGET_DIR = ${TARGET_BUILD_DIR}/Documentation DOCUMENTATION_TEMP_DIR = ${PROJECT_TEMP_DIR}/${CONFIGURATION}/Documentation.build DOCUMENTATION_TEMPLATES_DIR = ${DOCUMENTATION_SOURCE_DIR}/Templates +DOCUMENTAION_DOCSET_ID = com.zang.RegexKit.Documentation.docset +DOCUMENTAION_DOCSET_PACKAGED_FILE = com.zang.RegexKit.Documentation.xar + DOCUMENTATION_SQL_DATABASE_DIR = ${DOCUMENTATION_TEMP_DIR} DOCUMENTATION_SQL_DATABASE_FILE = ${DOCUMENTATION_SQL_DATABASE_DIR}/${PROJECT_NAME}_headerdoc.sqlitedb DOCUMENTATION_SQL_CONFIG_FILE = ${DOCUMENTATION_SQL_DIR}/config.sql DOCUMENTATION_SQL_INIT_FILE = ${DOCUMENTATION_SQL_DIR}/init.sql BUILD_DOCUMENTATION_SCRIPT = ${DOCUMENTATION_SCRIPTS_DIR}/buildDocumentation.sh +BUILD_DOCSET_SCRIPT = ${DOCUMENTATION_SCRIPTS_DIR}/buildDocSet.sh DOCUMENTATION_CHECK_HTML_SCRIPT = ${DOCUMENTATION_SCRIPTS_DIR}/checkHTML.sh DOCUMENTATION_CHECK_SPELLING_SCRIPT = ${DOCUMENTATION_SCRIPTS_DIR}/checkSpelling.sh +DOCUMENTATION_CREATE_DOCSET_SCRIPT = ${DOCUMENTATION_SCRIPTS_DIR}/createDocset.pl DOCUMENTATION_GENERATE_HTML_SCRIPT = ${DOCUMENTATION_SCRIPTS_DIR}/generateHTML.pl DOCUMENTATION_PARSE_HEADERS_SCRIPT = ${DOCUMENTATION_SCRIPTS_DIR}/parseHeaders.pl DOCUMENTATION_RESOLVE_LINKS_SCRIPT = ${DOCUMENTATION_SCRIPTS_DIR}/resolveLinks.pl +DOCUMENTATION_DOCSET_TEMP_DIR = ${PROJECT_TEMP_DIR}/${CONFIGURATION}/DocSet.build +DOCUMENTATION_DOCSET_TEMP_DOCS_DIR = ${DOCUMENTATION_DOCSET_TEMP_DIR}/${DOCUMENTAION_DOCSET_ID}/Contents/Resources/Documents +DOCUMENTATION_DOCSET_SOURCE_HTML = ${DOCUMENTATION_TARGET_DIR} +DOCUMENTATION_DOCSET_TARGET_DIR = ${TARGET_BUILD_DIR}/DocSet + + // // All things distribution... // @@ -244,6 +274,7 @@ DISTRIBUTION_TEMP_DIR = ${PROJECT_TEMP_DIR}/${CONFIGURATION}/Dist DISTRIBUTION_TEMP_BINARY_DIR = ${DISTRIBUTION_TEMP_DIR}/Binary DISTRIBUTION_TEMP_SOURCE_DIR = ${DISTRIBUTION_TEMP_DIR}/Source +DISTRIBUTION_TEMP_PACKAGES_DIR = ${DISTRIBUTION_TEMP_DIR}/Packages DISTRIBUTION_BASE_FILE_NAME = ${DISTRIBUTION_ROOT_NAME} DISTRIBUTION_BASE_SOURCE_FILE_NAME = ${DISTRIBUTION_BASE_FILE_NAME}_source @@ -254,8 +285,27 @@ DISTRIBUTION_DMG_VOL_NAME = ${DISTRIBUTION_ROOT_NAME} DISTRIBUTION_ROOT_NAME = ${PROJECT_NAME}_${PROJECT_CURRENT_VERSION} DISTRIBUTION_ROOT_SOURCE_NAME = ${PROJECT_NAME}_${PROJECT_CURRENT_VERSION}_source -// SQL database with distribution configuration information +// SQL database with distribution configuration information. DISTRIBUTION_SQL_DATABASE_FILE = ${DISTRIBUTION_SQL_DATABASE_DIR}/${PROJECT_NAME}_distribution.sqlitedb DISTRIBUTION_SQL_FILES_FILE = ${BUILD_SQL_DIR}/files.sql +DISTRIBUTION_PARALLEL_BUILD = ${PARALLEL_BUILD} // Allow `make` to build the Distribution target with up to hw.activecpu jobs at once. + +// Optionally gzip the .pkg (really Contents/Archive.pax). +// This is disable by default because it makes the final .dmg ~60-70K larger. +DISTRIBUTION_GZIP_PACKAGES = NO + +// Optionally include the ${PCRE_TARBALL_FILE_NAME} in the final Mac OS X Installer package. +// This is disabled by default because it doubles the final .dmg size. +DISTRIBUTION_INCLUDE_PCRE_PACKAGE = NO + +// The default directory to install everything. +DISTRIBUTION_DEFAULT_INSTALL_DIR = /Developer/Local/ + +DISTRIBUTION_PACKAGE_PLISTS_DIR = ${BUILD_PACKAGEMAKER_DIR}/plists +DISTRIBUTION_PACKAGE_FRAMEWORK = RegexKit_Framework.pkg +DISTRIBUTION_PACKAGE_HTML_DOCUMENTATION = RegexKit_HTML_Documentation.pkg +DISTRIBUTION_PACKAGE_DOCSET_DOCUMENTATION = RegexKit_DocSet_Documentation.pkg +DISTRIBUTION_PACKAGE_SOURCECODE = RegexKit_Sourcecode.pkg +DISTRIBUTION_PACKAGE_SOURCECODE_PCRE = RegexKit_Sourcecode_pcre.pkg diff --git a/Source/Documentation/Misc/spelling_words b/Source/Documentation/Misc/spelling_words index 3a4415f..8c54d8f 100644 --- a/Source/Documentation/Misc/spelling_words +++ b/Source/Documentation/Misc/spelling_words @@ -1,5 +1,10 @@ -personal_ws-1.1 en 1380 +personal_ws-1.1 en 1510 ABI +APIs +ARGS +AbsoluteTime +AbsoluteToNanoseconds +AppKit BOOL CFAllocatorRef CFArray @@ -8,6 +13,8 @@ CFArrayCreate CFArrayGetCount CFArrayGetValues CFArrayRef +CFBundleShortVersionString +CFBundleVersion CFDictionaryCreate CFDictionaryGetCount CFDictionaryGetKeysAndValues @@ -19,6 +26,7 @@ CFMutableStringRef CFRange CFRelease CFRetain +CFRuntimeBase CFSetCreate CFSetGetCount CFSetGetValues @@ -33,14 +41,19 @@ CFStringGetNameOfEncoding CFStringRef CFStringReplaceAll CFTypeRef +CFZombieLevel CONF +CPUTime CRLF +CTORS +CXX CacheDebugging CaptureSubpatternReferenceSyntax CaptureSubpatternReferenceandTypeConversionSyntax CountersDebugging DYLD DataTypes +DebugStr Duhb EAGAIN EBCDIC @@ -49,17 +62,23 @@ EDEADLK EINVAL ENDHANDLER ENOMEM +ENV EPERM Engelhart ExpansionofCaptureSubpatternMatchReferencesinStrings FAQish +FINALIZERS FreeBSD Friedl's +GC +GDB GNUstep GSDoc HDOC HeaderDoc IEEE +IMPL +INITIALIZERS INLINE JavaScript LDFLAGS @@ -67,8 +86,16 @@ LF LINENO MACOSX MAXPATHLEN +MULTITHREADING Makefile Makefiles +MallocBadFreeAbort +MallocDoNotProtectPostlude +MallocDoNotProtectPrelude +MallocGuardEdges +MallocLogFile +MallocPreScribble +MallocScribble MallocStackLogging MallocStackLoggingNoCompact Metacharacters @@ -76,11 +103,15 @@ Multi MyCompanyName NAMECOUNT NAMETABLE +NSAccessibilityDebugLogLevel NSAllocateObject NSApplication NSArray NSAssert NSAttributedString +NSAutoreleaseFreedObjectCheckEnabled +NSAutoreleaseHighWaterMark +NSAutoreleaseHighWaterResolution NSAutoreleasePool NSBackgroundColorAttributeName NSCAssert @@ -89,22 +120,38 @@ NSCalendarDate NSCoder NSCoding NSColor +NSConcretePortCoder +NSConnection NSCopying NSCountMapTable NSCreateMapTable +NSDOLoggingEnabled NSDate +NSDeallocateZombies +NSDebugEnabled NSDefaultMallocZone NSDictionary +NSDistantObject +NSDragManagerLogLevel +NSEnableAutoreleasePool NSEndMapTableEnumeration NSEnumerateMapTable NSEnumerator NSEqualRanges NSException +NSExceptionLogging +NSExceptionLoggingEnabled NSFreeMapTable +NSGarbageCollector +NSHangOnUncaughtException NSIntMapKeyCallBacks +NSInteger +NSIntegerMax +NSIntegerMin NSInternalInconsistencyException NSInvalidArgumentException NSInvalidUnarchiveOperationException +NSInvocation NSLog NSMakeRange NSMallocException @@ -134,23 +181,36 @@ NSNumberFormatterPercentStyle NSNumberFormatterScientificStyle NSNumberFormatterSpellOutStyle NSNumberFormatterStyle +NSObjCMessageLoggingEnabled NSObjCRuntime NSObject NSObjectMapValueCallBacks NSParameterAssert +NSPrintDynamicClassLoads +NSQuitAfterLaunch NSRange NSRangeException NSRanges NSScanner +NSScriptingDebugLogLevel NSSet +NSShowAllDrawing +NSShowAllDrawingColor +NSShowAllViews NSString +NSStringFromClass NSStringFromRange NSStringFromSelector NSStringREExtensionsLinkerInitialized NSThread NSToolTipAttributeName +NSTraceEvents +NSUInteger +NSUIntegerMax NSUTF +NSUnbufferedIO NSValue +NSZombieEnabled NSZone Neato NewlineAny @@ -158,6 +218,7 @@ NewlineCR NewlineCRLF NewlineLF NextStep +OBJC OCUnit OSX ObjC @@ -168,9 +229,11 @@ PCREBuildConfig PCREMajorVersion PCREMinorVersion PCREVersionString -PowerPC POSIX +PREBIND +PREBINDING PRESIZE +PowerPC Preprocessor REAUTORELEASEDMEMORY RECACHE @@ -180,6 +243,7 @@ REPLACEHOLDER REPrivate REReadWriteLock REUTILITY +RGB RK RKAppendCopyInstruction RKAppendInstruction @@ -218,6 +282,7 @@ RKBuildConfigUTF RKBuildConfigUnicodeProperties RKCFArrayEqualCallBack RKCFArrayRelease +RKCPUTime RKCache RKCacheDef RKCachedArrayOfNulls @@ -348,6 +413,9 @@ RKGetThreadLocalData RKGetThreadLocalNumberFormatter RKHashForStringAndCompileOption RKIndexOfFirstMatch +RKInteger +RKIntegerMax +RKIntegerMin RKIsMainThread RKLock RKLockDef @@ -437,9 +505,13 @@ RKThreadIsExiting RKThreadLocalData RKThreadYield RKTypeCollectionRelease +RKUInteger +RKUIntegerMax RKUtility RKYesOrNo RSYNC +RTP +ReadMe Redistributions RegexKit RegexKitAdditions @@ -450,16 +522,25 @@ RegexKits SDKROOT SED SEL +SIGINT SQLite SRCROOT +STDC +SUPERCLASSES SetFile Solaris SourceForge +SysBreak TIMESTAMP +ThreadDebug +UDBZ UInt ULONG +USERBREAK Uhl Untaring +WSDebug +WSDebugVerbose Wahoo Wiki Wikipedia @@ -676,6 +757,7 @@ copyWithZone countOfObjectsMatchingRegex cp cpp +cpuTimeUsed createMutableConvertedString currentClass currentFormatterStyle @@ -683,6 +765,7 @@ currentRange currentRangeForCapture currentRangeForCaptureName currentRanges +currentRusage cvs cwdBuffer cwdString @@ -695,6 +778,7 @@ dbname dealloc deallocated deallocation +deallocations debuggingEnabled decodeBuildConfig decodeCompileOption @@ -724,7 +808,9 @@ didMatch didMatchKey didMatchObject didPrintLockWarning +diffTime differenceBuildConfig +differenceOfStartingTime dir dirs dmg @@ -732,10 +818,14 @@ doAction doesNotExist dollarsString doubleValue +dummyDateFunction +dummyInt dumpClass dumpCopyInstructions dumpReferenceInstructions +dyld dyldFrameworkEnvString +dylib elementArray elif elsif @@ -753,6 +843,7 @@ endFormat endReference endianness endif +endingTime entireMatchString entireString enum @@ -788,6 +879,7 @@ extractString extractedString fastestEncoding fetchrow +fi fileName finishedCountingArgs finishedExit @@ -819,6 +911,7 @@ fullText fullinfo func functionString +fus gcc generateHTML getCapturesWithReferences @@ -832,6 +925,7 @@ getObjects getRanges getcwd getenv +getrusage getspecific globalInitialized globalIsMultiThreaded @@ -928,9 +1022,11 @@ keysMatchingRegex lastCell lastRow lastVisibleElement +leakEnvString leftHandSide li libc +libgmalloc libpcre linkId linkText @@ -938,6 +1034,7 @@ linkerInitializeNSStringREExtensions linkerInitializeRKAutoreleasedMemory linkerInitializeRKRegex lipo +llu localException localizedNameOfStringEncoding lockPool @@ -947,7 +1044,9 @@ lookup lookupEnabledState lookupInitialized lowestCaptureIndex +lproj lt +machtimeStringFromCPUTime majorBuffer makehybrid malloc @@ -981,6 +1080,7 @@ matchedRanges matchesCharacters matchingRegex matchings +membuf memcpy memoryObject memset @@ -988,9 +1088,12 @@ methodList methodsArray methodsLength methodsStart +microSecondsStringFromCPUTime minorBuffer mkdir mozilla +mpkg +msgSends multithreaded multithreading mutableArray @@ -1000,6 +1103,7 @@ mutex mxref myController nameEntrySize +nanoSeconds natively newMapTable newString @@ -1064,6 +1168,7 @@ parsedRange parsedReferenceInt parsedReferenceRange parsedVarRange +pbxproj pch pcre pcreDoc @@ -1080,6 +1185,8 @@ performConversion perl perls pid +plist +plistUtil png pos ppc @@ -1169,8 +1276,11 @@ returnSet rightEdge rightHandSide rowArray +rss rtf +rtfd runtime +rusage rwlock scanProductString scanf @@ -1205,6 +1315,7 @@ setObjects setOpenTitlesCookie setSize setString +setUp setWithArray setWithObjects setspecific @@ -1213,26 +1324,34 @@ sharedObject shouldAutorelease singletonRKRegexPlaceholder sizeof +snprintf sourcecode spinCount spuriousErrors spuriousErrorsCount sql +sqlite sqlitedb sscanf stackBuffer stackCopyInstructions stackReferenceInstructions standardStringFormat +startAutoreleasedObjects startBracket startFormat startReference +startTopPool startingCaptureName +startingTime startsAt +stderr +stdout sth stmt strerror strictReference +stringArg stringArgumentsCount stringArray stringBuffer @@ -1241,6 +1360,8 @@ stringByMatching stringClass stringEncoding stringEnumerator +stringFromCPUTime +stringFromCPUTimeMemory stringHash stringNSDateLock stringWithCString @@ -1274,6 +1395,7 @@ sw sym symlink syslibroot +systemCPUTime tagArguments tagFullText tagKeywords @@ -1298,6 +1420,7 @@ th theRemovedObject throwException tid +timeUsed titleText tkid tld @@ -1318,6 +1441,7 @@ tocgroup tocid toggleWithElement topCaptureName +totalAutoreleasedObjects totalString trylock tryrdlock @@ -1327,10 +1451,13 @@ typedefEnum typedefs typeof ugo +uint ul +ulimit unachored unanchored unarchiving +unbuffered undecoded undef unescape @@ -1344,6 +1471,7 @@ untar updateToNextMatch useVarArgsList useable +userCPUTime userInfo usr utf @@ -1379,3 +1507,5 @@ xjf yesOrNo zebraBox zebraRows +zombified +zoneStats diff --git a/Source/Documentation/Resources/CSS/content.css b/Source/Documentation/Resources/CSS/content.css index cd8750c..0c0f431 100644 --- a/Source/Documentation/Resources/CSS/content.css +++ b/Source/Documentation/Resources/CSS/content.css @@ -17,7 +17,7 @@ body { font: 12px "lucida grande", geneva, helvetica, arial, sans-serif; color: .box.noJavascript { font-size: 0.8334em; border-width: 1px; white-space: normal; margin: 0px 8ex 0px 0px; padding: 0.5em 1ex;} .box.noJavascript > p + p { margin-top: 0.5em !important; } -.content .header { white-space: inherit; margin-bottom: 0.5em; max-width: 50%; } +.content .header { white-space: inherit; margin-bottom: 1.5em; max-width: 50%; } .content .header > .title { white-space: inherit; margin-top: 0.5em; font-size: 2.6667em; font-weight: bold; } .content .header > .subtitle { white-space: inherit; margin-top: 0.25em; } .content .intro { white-space: inherit; border-bottom: 1px solid #a1a5a9; padding-bottom: 0.5em; margin-bottom: 2.0em; } diff --git a/Source/Documentation/Resources/CSS/doc.css b/Source/Documentation/Resources/CSS/doc.css index 38ca0c7..15d1158 100644 --- a/Source/Documentation/Resources/CSS/doc.css +++ b/Source/Documentation/Resources/CSS/doc.css @@ -106,11 +106,11 @@ h5 { margin-top: 1.5em; margin-bottom: 0.5000em; font-size: 1.0834em; padding: .chrono ul { margin-left: 4.0ex; padding-left: 1ex; list-style-type: square; } .chrono ul li { margin-top: 0.5em; } -.chrono > .entry { margin-left: 2ex; margin-bottom: 1em; padding-right: 2ex; } +.chrono > .entry { margin-left: 2ex; margin-bottom: 1.75em; padding-right: 2ex; } .chrono > .entry > .banner { margin-left: -1.25ex; font-size: 1.0834em; } .chrono > .entry > .banner > .bannerItemSpacer { margin-right: 1.25ex; margin-left: 1.25ex; } /*.chrono > .entry > .bannerSpacer { border-bottom: 1px solid #e8e8e8; height: 0px; width: 95%; margin-left: -1.5ex; margin-top: 0.25em; margin-bottom: 0.25em; }*/ -.chrono > .entry > .bannerSpacer { margin-left: -2.0ex; /*padding-left: 1.5ex;*/ border-bottom: 1px solid #e8e8e8; margin-top: 0.25em; margin-bottom: 0.25em; width: 95% } +.chrono > .entry > .bannerSpacer { margin-left: -2.0ex; /*padding-left: 1.5ex;*/ border-bottom: 1px solid #d8d8d8; margin-top: 0.25em; margin-bottom: 0.25em; width: 95% } .chrono > .entry > .content { margin-top: 0.5em; } .chrono > .entry > .content > p:first-child { margin-top: 0px; margin-bottom: 0px; } diff --git a/Source/Documentation/Resources/CSS/print.css b/Source/Documentation/Resources/CSS/print.css index 43808c8..29c6d02 100644 --- a/Source/Documentation/Resources/CSS/print.css +++ b/Source/Documentation/Resources/CSS/print.css @@ -10,6 +10,7 @@ h5 { border-bottom: 1px solid black; font-family: palatino, "Times New Roman", t .frameworkabstract { margin-left: -0.5in; } +.table, .box { background-color: white; } .code, .regex, .regex-textual, .regex-def, .header_file, .file, .build-phase, .xcode-group, .xcode-target, .window-name, .box.sourcecode, .guide .sourceLicense pre, .method > .signature, .function > .signature, .constants > .constant > .identifier { font-size: 0.8334em; font-family: "Letter Gothic Std", monaco, courier, monospace; } .regex b { font: bold 1.1000em "Letter Gothic Std", monaco, courier, monospace; } .syntax > .specification { font-family: "Letter Gothic Std", monaco, courier, monospace; } diff --git a/Source/Documentation/SQL/config.sql b/Source/Documentation/SQL/config.sql index 8a12428..bb2ace6 100644 --- a/Source/Documentation/SQL/config.sql +++ b/Source/Documentation/SQL/config.sql @@ -20,6 +20,8 @@ INSERT INTO xrefs (xref, class) VALUES ("CFDictionaryKeyCallBacks", "code INSERT INTO xrefs (xref, class) VALUES ("CFMutableDictionary", "code"); INSERT INTO xrefs (xref, class) VALUES ("FOUNDATION_STATIC_INLINE", "code"); INSERT INTO xrefs (xref, class, href) VALUES ("GNUstep", "section-link", "http://www.gnustep.org/"); +INSERT INTO xrefs (xref, class) VALUES ("INT_MIN", "code"); +INSERT INTO xrefs (xref, class) VALUES ("INT_MAX", "code"); INSERT INTO xrefs (xref, class) VALUES ("NSArray", "code"); INSERT INTO xrefs (xref, class) VALUES ("NSAttributedString", "code"); @@ -36,6 +38,9 @@ INSERT INTO xrefs (xref, class, href) VALUES ("NSDictionary/dictionaryWithObjec INSERT INTO xrefs (xref, class) VALUES ("NSEnumerator", "code"); INSERT INTO xrefs (xref, class, href) VALUES ("NSEnumerator/nextObject", "code", "http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSEnumerator_Class/Reference/Reference.html#//apple_ref/occ/instm/NSEnumerator/nextObject"); INSERT INTO xrefs (xref, class, href) VALUES ("NSException", "code", "http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSException_Class/Reference/Reference.html"); +INSERT INTO xrefs (xref, class) VALUES ("NSInteger", "code"); +INSERT INTO xrefs (xref, class) VALUES ("NSIntegerMin", "code"); +INSERT INTO xrefs (xref, class) VALUES ("NSIntegerMax", "code"); INSERT INTO xrefs (xref, class, href) VALUES ("NSInvalidArgumentException", "code", "http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference.html#//apple_ref/doc/c_ref/NSInvalidArgumentException"); INSERT INTO xrefs (xref, class, href) VALUES ("NSInvalidArchiveOperationException", "code", "http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSInvalidArchiveOperationException"); INSERT INTO xrefs (xref, class, href) VALUES ("NSInvalidUnarchiveOperationException", "code", "http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSKeyedUnarchiver_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSInvalidUnarchiveOperationException"); @@ -71,6 +76,8 @@ INSERT INTO xrefs (xref, class, href) VALUES ("NSSet/anyObject", "code", "http: INSERT INTO xrefs (xref, class) VALUES ("NSString", "code"); INSERT INTO xrefs (xref, class) VALUES ("NSThread", "code"); INSERT INTO xrefs (xref, class, href) VALUES ("NSToolTipAttributeName", "code", "http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSAttributedString_AppKitAdditions/Reference/Reference.html#//apple_ref/doc/c_ref/NSToolTipAttributeName"); +INSERT INTO xrefs (xref, class) VALUES ("NSUInteger", "code"); +INSERT INTO xrefs (xref, class) VALUES ("NSUIntegerMax", "code"); INSERT INTO xrefs (xref, class) VALUES ("NSValue", "code"); INSERT INTO xrefs (xref, class, href) VALUES ("NS_DURING", "code", "http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NS_DURING"); INSERT INTO xrefs (xref, class, href) VALUES ("NS_ENDHANDLER", "code", "http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NS_ENDHANDLER"); @@ -87,6 +94,7 @@ INSERT INTO xrefs (xref, class) VALUES ("RKLock", "code"); INSERT INTO xrefs (xref, class) VALUES ("RKLOCK_MAX_SPURIOUS_ERROR_ATTEMPTS", "code"); INSERT INTO xrefs (xref, class) VALUES ("RKReadWriteLock", "code"); INSERT INTO xrefs (xref, class) VALUES ("RKThreadYield", "code"); +INSERT INTO xrefs (xref, class) VALUES ("UINT_MAX", "code"); INSERT INTO xrefs (xref, class) VALUES ("alloca", "code"); INSERT INTO xrefs (xref, class) VALUES ("allocWithZone:", "code"); INSERT INTO xrefs (xref, class) VALUES ("autorelease", "code"); diff --git a/Source/Documentation/SQL/docset.sql b/Source/Documentation/SQL/docset.sql new file mode 100644 index 0000000..e19ff0a --- /dev/null +++ b/Source/Documentation/SQL/docset.sql @@ -0,0 +1,58 @@ +drop table docset; +drop table files; +drop table nodeNames; +--drop view v_tst; + +BEGIN; + +CREATE TABLE IF NOT EXISTS docset ( +dsid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, +docset TEXT NOT NULL, +UNIQUE (docset) ON CONFLICT REPLACE +); + +CREATE TABLE IF NOT EXISTS files ( +fid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, +dsid INTEGER, +path TEXT NOT NULL, +file TEXT NOT NULL, +filePath TEXT NOT NULL, +UNIQUE (path, file) ON CONFLICT IGNORE +); + +CREATE INDEX IF NOT EXISTS files_dsid_path_file_idx ON files (dsid, path, file); +CREATE INDEX IF NOT EXISTS files_filePath_idx ON files (filePath); + +CREATE TABLE IF NOT EXISTS nodeNames ( +refid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, +fid INTEGER NOT NULL, +anchor TEXT, +href TEXT NOT NULL, +name TEXT NOT NULL, +UNIQUE (refid, anchor) ON CONFLICT REPLACE +); + +CREATE INDEX IF NOT EXISTS nodeNames_fid ON nodeNames (fid); + +CREATE TRIGGER IF NOT EXISTS nodeNames_null_anchor_trig +AFTER INSERT ON nodeNames +FOR EACH ROW WHEN NEW.anchor IS NULL +BEGIN DELETE FROM nodeNames WHERE nodeNames.anchor IS NULL AND nodeNames.fid = NEW.fid AND refid != NEW.refid; END; +/* +CREATE VIEW IF NOT EXISTS v_tst AS +SELECT +ds.dsid AS dsid, +f.fid AS fid, +nn.refid AS refid, +ds.docset AS docset, +f.path AS path, +f.file AS file, +nn.anchor AS anchor, +nn.name AS name +FROM docset AS ds +JOIN files AS f ON f.dsid = ds.dsid +JOIN nodeNames AS nn ON nn.fid = f.fid +--ORDER BY ds.dsid, f.fid, nn.refid +; +*/ +COMMIT; diff --git a/Source/Documentation/SQL/init.sql b/Source/Documentation/SQL/init.sql index 2a7a4f3..cf2abb2 100644 --- a/Source/Documentation/SQL/init.sql +++ b/Source/Documentation/SQL/init.sql @@ -331,6 +331,7 @@ tg.groupName AS groupName, tm.pos AS pos, toc.tocName || '.html' AS file, occl.class || '_' || CASE WHEN ocm.type = '+' THEN '.' ELSE '-' END || ocm.selector AS linkId, +'//apple_ref/occ/' || CASE WHEN ocm.type = '+' THEN 'clm/' ELSE 'instm/' END || occl.class || '/' || ocm.selector AS apple_ref, va.text AS titleText, ocm.signature AS linkText FROM @@ -352,6 +353,7 @@ tg.groupName AS groupName, tm.pos AS pos, toc.tocName || '.html' AS file, occl.class || '_' || occlcat.category || '_' || '_' || CASE WHEN ocm.type = '+' THEN '.' ELSE '-' END || ocm.selector AS linkId, +'//apple_ref/occ/' || CASE WHEN ocm.type = '+' THEN 'clm/' ELSE 'instm/' END || occl.class || '/' || ocm.selector AS apple_ref, va.text AS titleText, ocm.signature AS linkText FROM @@ -387,6 +389,7 @@ UNION SELECT ocm.ocmid AS ocmid, ocm.type || ' ' || ocm.selector AS xref FROM ob UNION SELECT ocm.ocmid AS ocmid, ocm.type || ocm.selector AS xref FROM objcMethods AS ocm WHERE ocm.hdcid IS NOT NULL UNION SELECT ocm.ocmid AS ocmid, ocm.selector AS xref FROM objcMethods AS ocm WHERE ocm.hdcid IS NOT NULL UNION SELECT ocm.ocmid AS ocmid, ocm.signature AS xref FROM objcMethods AS ocm WHERE ocm.hdcid IS NOT NULL +UNION SELECT xa.ocmid AS ocmid, xa.apple_ref AS xref FROM v_xaref_ocm AS xa ; CREATE VIEW v_xhref_ocm AS SELECT @@ -401,6 +404,7 @@ xa.groupName AS groupName, xa.pos AS pos, xa.file AS file, xa.linkId AS linkId, +xa.apple_ref AS apple_ref, xa.titleText AS titleText, xa.linkText AS linkText FROM v_xaref_ocm AS xa JOIN v_xbref_ocm AS xb ON xa.ocmid = xb.ocmid @@ -420,6 +424,7 @@ tg.groupName AS groupName, tm.pos AS pos, toc.tocName || '.html' AS file, c.name AS linkId, +'//apple_ref/c/data/' || c.name AS apple_ref, va.text AS titleText, c.name AS linkText FROM @@ -443,6 +448,7 @@ NULL AS groupName, tm.pos AS pos, 'Constants.html' AS file, c.name AS linkId, +'//apple_ref/c/data/' || c.name AS apple_ref, va.text AS titleText, c.name AS linkText FROM @@ -468,6 +474,7 @@ tg.groupName AS groupName, tm.pos AS pos, toc.tocName || '.html' AS file, d.defineName AS linkId, +'//apple_ref/c/macro/' || d.defineName AS apple_ref, va.text AS titleText, d.defineName AS linkText FROM @@ -492,6 +499,7 @@ d.defineName AS xref, tm.pos AS pos, 'Constants.html' AS file, d.defineName AS linkId, +'//apple_ref/c/macro/' || d.defineName AS apple_ref, va.text AS titleText, d.defineName AS linkText FROM @@ -520,6 +528,7 @@ tg.groupName AS groupName, tm.pos AS pos, toc.tocName || '.html' AS file, td.name AS linkId, +'//apple_ref/c/tdef/' || td.name AS apple_ref, va.text AS titleText, td.name AS linkText FROM @@ -543,6 +552,7 @@ NULL AS groupName, tm.pos AS pos, 'DataTypes.html' AS file, td.name AS linkId, +'//apple_ref/c/tdef/' || td.name AS apple_ref, va.text AS titleText, td.name AS linkText FROM @@ -568,6 +578,7 @@ NULL AS groupName, NULL AS pos, toc.tocName || '.html' AS file, td.name || '_' || ei.identifier AS linkId, +'//apple_ref/c/econst/' || ei.identifier AS apple_ref, NULL AS titleText, NULL AS linkText FROM @@ -592,6 +603,7 @@ NULL AS groupName, NULL AS pos, 'DataTypes.html' AS file, td.name || '_' || ei.identifier AS linkId, +'//apple_ref/c/econst/' || ei.identifier AS apple_ref, NULL AS titleText, NULL AS linkText FROM typedefEnum AS td JOIN enumIdentifier AS ei ON ei.tdeid = td.tdeid @@ -611,6 +623,7 @@ NULL AS groupName, NULL AS pos, toc.tocName || '.html' AS file, td.name || '_' || ei.identifier AS linkId, +'//apple_ref/c/econst/' || ei.identifier AS apple_ref, NULL AS titleText, NULL AS linkText FROM @@ -635,6 +648,7 @@ NULL AS groupName, NULL AS pos, 'DataTypes.html' AS file, td.name || '_' || ei.identifier AS linkId, +'//apple_ref/c/econst/' || ei.identifier AS apple_ref, NULL AS titleText, NULL AS linkText FROM typedefEnum AS td JOIN enumIdentifier AS ei ON ei.tdeid = td.tdeid @@ -654,6 +668,7 @@ tg.groupName AS groupName, tm.pos AS pos, toc.tocName || '.html' AS file, p.sym AS linkId, +'//apple_ref/c/func/' || p.sym AS apple_ref, va.text AS titleText, p.sym AS linkText FROM @@ -677,6 +692,7 @@ NULL AS groupName, tm.pos AS pos, 'Functions.html' AS file, p.sym AS linkId, +'//apple_ref/c/func/' || p.sym AS apple_ref, va.text AS titleText, p.sym AS linkText FROM @@ -701,6 +717,7 @@ NULL AS groupName, NULL AS pos, v2.text || '.html' AS file, NULL AS linkId, +'//apple_ref/occ/cl/' || occl.class AS apple_ref, va.text AS titleText, occl.class AS linkText FROM objcclass AS occl @@ -720,14 +737,23 @@ UNION SELECT xref, coalesce(linkId, ""), coalesce(file || '#' || coalesce(linkId UNION SELECT xref, coalesce(linkId, ""), coalesce(file || '#' || coalesce(linkId, ""), file) AS href FROM v_xhref_class ; +CREATE VIEW v_xxapple_ref AS + SELECT xref, coalesce(apple_ref, ""), coalesce(file || '#' || coalesce(apple_ref, ""), file) AS href FROM v_xhref_const +UNION SELECT xref, coalesce(apple_ref, ""), coalesce(file || '#' || coalesce(apple_ref, ""), file) AS href FROM v_xhref_ocm +UNION SELECT xref, coalesce(apple_ref, ""), coalesce(file || '#' || coalesce(apple_ref, ""), file) AS href FROM v_xhref_typedef +UNION SELECT xref, coalesce(apple_ref, ""), coalesce(file || '#' || coalesce(apple_ref, ""), file) AS href FROM v_xhref_typedef_enum +UNION SELECT xref, coalesce(apple_ref, ""), coalesce(file || '#' || coalesce(apple_ref, ""), file) AS href FROM v_xhref_func +UNION SELECT xref, coalesce(apple_ref, ""), coalesce(file || '#' || coalesce(apple_ref, ""), file) AS href FROM v_xhref_class +; + CREATE VIEW v_xtoc AS - SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, titleText, linkText FROM v_xhref_const -UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, titleText, linkText FROM v_xhref_ocm -UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, titleText, linkText FROM v_xhref_typedef -UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, NULL, NULL, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, NULL, NULL FROM v_xhref_typedef_enum -UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, titleText, linkText FROM v_xhref_func -UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, titleText, linkText FROM v_xhref_class -UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, titleText, linkText FROM v_xhref_define + SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, coalesce(apple_ref, "") AS apple_ref, titleText, linkText FROM v_xhref_const +UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, coalesce(apple_ref, "") AS apple_ref, titleText, linkText FROM v_xhref_ocm +UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, coalesce(apple_ref, "") AS apple_ref, titleText, linkText FROM v_xhref_typedef +UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, NULL, NULL, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, coalesce(apple_ref, "") AS apple_ref, NULL, NULL FROM v_xhref_typedef_enum +UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, coalesce(apple_ref, "") AS apple_ref, titleText, linkText FROM v_xhref_func +UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, coalesce(apple_ref, "") AS apple_ref, titleText, linkText FROM v_xhref_class +UNION SELECT tbl, idCol, id, hdcid, hdtype, xref, tocName, groupName, pos, file, coalesce(linkId, "") AS linkId, coalesce(file || '#' || linkId, file) AS href, coalesce(apple_ref, "") AS apple_ref, titleText, linkText FROM v_xhref_define ; @@ -760,7 +786,6 @@ JOIN tags AS t ON hdc.hdcid = t.hdcid JOIN tagKeywords AS tk ON t.tkid = tk.tkid AND tk.arguments = 2 JOIN tagArguments AS ta0 ON ta0.tid = t.tid AND ta0.argument = 0 JOIN tagArguments AS ta1 ON ta1.tid = t.tid AND ta1.argument = 1 -ORDER BY hdc.hdcid, t.position ; @@ -795,5 +820,43 @@ JOIN toc ON toc.tocid = tm.tocid JOIN tocGroup AS tg ON tg.tgid = tm.tgid ; +CREATE INDEX objCMethods_occlid_idx ON objCMethods (occlid); +CREATE INDEX define_hdcid_idx ON define (hdcid); + + +CREATE TABLE docset ( +dsid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, +docset TEXT NOT NULL, +UNIQUE (docset) ON CONFLICT REPLACE +); + +CREATE TABLE files ( +fid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, +dsid INTEGER, +path TEXT NOT NULL, +file TEXT NOT NULL, +filePath TEXT NOT NULL, +UNIQUE (path, file) ON CONFLICT IGNORE +); + +CREATE INDEX files_dsid_path_file_idx ON files (dsid, path, file); +CREATE INDEX files_filePath_idx ON files (filePath); + +CREATE TABLE nodeNames ( +refid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, +fid INTEGER NOT NULL, +anchor TEXT, +href TEXT NOT NULL, +name TEXT NOT NULL, +UNIQUE (refid, anchor) ON CONFLICT REPLACE +); + +CREATE INDEX nodeNames_fid ON nodeNames (fid); + +CREATE TRIGGER nodeNames_null_anchor_trig +AFTER INSERT ON nodeNames +FOR EACH ROW WHEN NEW.anchor IS NULL +BEGIN DELETE FROM nodeNames WHERE nodeNames.anchor IS NULL AND nodeNames.fid = NEW.fid AND refid != NEW.refid; END; + COMMIT; diff --git a/Source/Documentation/Scripts/buildDocSet.sh b/Source/Documentation/Scripts/buildDocSet.sh new file mode 100755 index 0000000..4af50ca --- /dev/null +++ b/Source/Documentation/Scripts/buildDocSet.sh @@ -0,0 +1,111 @@ +#!/bin/sh + +# Certain parts of this could be a lot better. + +# The header doc parser -> db script will actually check modification +# date/times of the header file vs. whats in the database, which +# was added to do make style only update on change. But the whole +# thing, from db creation, parsing, to generating the html files +# only takes a few seconds so it rebuilds the whole thing from +# scratch each time. headerdoc2html + gatherheaderdoc would +# drag on and on and on... + + + +export DOCUMENTATION_CHECK_HTML_SCRIPT=${DOCUMENTATION_CHECK_HTML_SCRIPT:?"error: Environment variable DOCUMENTATION_CHECK_HTML_SCRIPT must exist, aborting."} +export DOCUMENTATION_CHECK_SPELLING_SCRIPT=${DOCUMENTATION_CHECK_SPELLING_SCRIPT:?"error: Environment variable DOCUMENTATION_CHECK_SPELLING_SCRIPT must exist, aborting."} +export DOCUMENTATION_GENERATE_HTML_SCRIPT=${DOCUMENTATION_GENERATE_HTML_SCRIPT:?"error: Environment variable DOCUMENTATION_GENERATE_HTML_SCRIPT must exist, aborting."} +export DOCUMENTATION_PARSE_HEADERS_SCRIPT=${DOCUMENTATION_PARSE_HEADERS_SCRIPT:?"error: Environment variable DOCUMENTATION_PARSE_HEADERS_SCRIPT must exist, aborting."} +export DOCUMENTATION_RESOLVE_LINKS_SCRIPT=${DOCUMENTATION_RESOLVE_LINKS_SCRIPT:?"error: Environment variable DOCUMENTATION_RESOLVE_LINKS_SCRIPT must exist, aborting."} +export DOCUMENTATION_RESOURCES_DIR=${DOCUMENTATION_RESOURCES_DIR:?"error: Environment variable DOCUMENTATION_RESOURCES_DIR must exist, aborting."} +export DOCUMENTATION_SOURCE_DIR=${DOCUMENTATION_SOURCE_DIR:?"error: Environment variable DOCUMENTATION_SOURCE_DIR must exist, aborting."} +export DOCUMENTATION_SQL_DATABASE_DIR=${DOCUMENTATION_SQL_DATABASE_DIR:?"error: Environment variable DOCUMENTATION_SQL_DATABASE_DIR must exist, aborting."} +export DOCUMENTATION_SQL_DATABASE_FILE=${DOCUMENTATION_SQL_DATABASE_FILE:?"error: Environment variable DOCUMENTATION_SQL_DATABASE_FILE must exist, aborting."} +export DOCUMENTATION_SQL_DIR=${DOCUMENTATION_SQL_DIR:?"error: Environment variable DOCUMENTATION_SQL_DIR must exist, aborting."} +export DOCUMENTATION_SQL_INIT_FILE=${DOCUMENTATION_SQL_INIT_FILE:?"error: Environment variable DOCUMENTATION_SQL_INIT_FILE must exist, aborting."} +export DOCUMENTATION_SQL_CONFIG_FILE=${DOCUMENTATION_SQL_CONFIG_FILE:?"error: Environment variable DOCUMENTATION_SQL_CONFIG_FILE must exist, aborting."} +export DOCUMENTATION_TARGET_DIR=${DOCUMENTATION_TARGET_DIR:?"error: Environment variable DOCUMENTATION_TARGET_DIR must exist, aborting."} +export DOCUMENTATION_TEMP_DIR=${DOCUMENTATION_TEMP_DIR:?"error: Environment variable DOCUMENTATION_TEMP_DIR must exist, aborting."} +export DOCUMENTATION_TEMPLATES_DIR=${DOCUMENTATION_TEMPLATES_DIR:?"error: Environment variable DOCUMENTATION_TEMPLATES_DIR must exist, aborting."} +export PCRE_INSTALL_DIR=${PCRE_INSTALL_DIR:?"error: Environment variable PCRE_INSTALL_DIR must exist, aborting."} +export PCRE_HTML_DIR=${PCRE_HTML_DIR:?"error: Environment variable PCRE_HTML_DIR must exist, aborting."} +export PERL=${PERL:?"Environment variable PERL must exist, aborting."} +export PROJECT_HEADERS_DIR=${PROJECT_HEADERS_DIR:?"Environment variable PROJECT_HEADERS_DIR must exist, aborting."} +export PROJECT_NAME=${PROJECT_NAME:?"Environment variable PROJECT_NAME must exist, aborting."} +export RSYNC=${RSYNC:?"Environment variable RSYNC must exist, aborting."} +export SQLITE=${SQLITE:?"Environment variable SQLITE must exist, aborting."} + +"${PERL}" -e 'require DBD::SQLite;' >/dev/null 2>&1 +if [ $? != 0 ]; then echo "$0:$LINENO: error: The perl module 'DBD::SQLite' must be installed in order to build the the target '${TARGETNAME}'."; exit 1; fi; + + +TIMESTAMP_FILE="${DOCUMENTATION_DOCSET_TEMP_DIR}/buildDocSet_timestamp" + +DOCS_UP_TO_DATE="No"; + +if [ -f "${TIMESTAMP_FILE}" ]; then + DOCS_UP_TO_DATE="Yes"; + if [ ! -d "${DOCUMENTATION_DOCSET_TARGET_DIR}" ]; then DOCS_UP_TO_DATE="No"; fi; + NEWER_FILES=`"${FIND}" "${PROJECT_HEADERS_DIR}" -newer "${TIMESTAMP_FILE}"`; + if [ "${NEWER_FILES}" != "" ]; then DOCS_UP_TO_DATE="No"; fi; + NEWER_FILES=`"${FIND}" "${DOCUMENTATION_DOCSET_SOURCE_HTML}" -newer "${TIMESTAMP_FILE}"`; + if [ "${NEWER_FILES}" != "" ]; then DOCS_UP_TO_DATE="No"; fi; + NEWER_FILES=`"${FIND}" "${DOCUMENTATION_SOURCE_DIR}" -newer "${TIMESTAMP_FILE}"`; + if [ "${NEWER_FILES}" != "" ]; then DOCS_UP_TO_DATE="No"; fi; + if [ $DOCS_UP_TO_DATE == "No" ]; then echo "$0:$LINENO: note: There are newer source files, rebuilding DocSet."; fi; +fi; + +if [ $DOCS_UP_TO_DATE == "Yes" ]; then echo "$0:$LINENO: note: DocSet files are up to date."; exit 0; fi; + +# Clear the time stamp. It will be recreated if we are successful. +rm -f "${TIMESTAMP_FILE}" + +DOCSETUTIL="${DEVELOPER_BIN_DIR}/docsetutil" + +# Used by some scripts we call to report the error location as this shell script. Sets LINENO when necessary. +export SCRIPT_NAME="$0"; + +# Scripts that do work for us. +if [ ! -x "${DOCUMENTATION_CREATE_DOCSET_SCRIPT}" ]; then echo "$0:$LINENO: error: The command 'createDocSet.pl' does not exist at '${DOCUMENTATION_CREATE_DOCSET_SCRIPT}'."; exit 1; fi; + + + +# Create the documentation directory if it doesn't exist, and if it does clean it out and start fresh +if [ ! -d "${DOCUMENTATION_DOCSET_TARGET_DIR}" ]; then + mkdir "${DOCUMENTATION_DOCSET_TARGET_DIR}" +else + rm -rf "${DOCUMENTATION_DOCSET_TARGET_DIR}"/* +fi + +rm -rf "${DOCUMENTATION_DOCSET_TEMP_DOCS_DIR}" + +mkdir -p "${DOCUMENTATION_DOCSET_TEMP_DOCS_DIR}" && \ + "${RSYNC}" -a --delete --cvs-exclude "${DOCUMENTATION_DOCSET_SOURCE_HTML}/" "${DOCUMENTATION_DOCSET_TEMP_DOCS_DIR}" +if [ $? != 0 ] ; then echo "$0:$LINENO: error: Unable to create temporary DocSet build area directory."; exit 1; fi; + +"${SQLITE}" "${DOCUMENTATION_SQL_DATABASE_FILE}" < "${DOCUMENTATION_SQL_DIR}/docset.sql" + +# Execute the DOCUMENTATION_CREATE_DOCSET_SCRIPT script. +echo "$0:$LINENO: note: Creating DocSet '${DOCUMENTAION_DOCSET_ID}'." +"${DOCUMENTATION_CREATE_DOCSET_SCRIPT}" +if [ $? != 0 ] ; then echo "$0:$LINENO: error: DocSet generation failed."; exit 1; fi; + +echo "$0:$LINENO: note: Indexing DocSet '${DOCUMENTAION_DOCSET_ID}'." +"${DOCSETUTIL}" index "${DOCUMENTATION_DOCSET_TEMP_DIR}/${DOCUMENTAION_DOCSET_ID}" && + mv "${DOCUMENTATION_DOCSET_TEMP_DIR}/${DOCUMENTAION_DOCSET_ID}/Contents/Resources/Nodes.xml" "${DOCUMENTATION_DOCSET_TEMP_DIR}" && + mv "${DOCUMENTATION_DOCSET_TEMP_DIR}/${DOCUMENTAION_DOCSET_ID}/Contents/Resources/Tokens.xml" "${DOCUMENTATION_DOCSET_TEMP_DIR}" +if [ $? != 0 ] ; then echo "$0:$LINENO: error: DocSet indexing failed."; exit 1; fi; + + +echo "$0:$LINENO: note: Packaging DocSet '${DOCUMENTAION_DOCSET_ID}'." +"${DOCSETUTIL}" package "${DOCUMENTATION_DOCSET_TEMP_DIR}/${DOCUMENTAION_DOCSET_ID}" +if [ $? != 0 ] ; then echo "$0:$LINENO: error: DocSet packaging failed."; exit 1; fi; + +mkdir -p "${DOCUMENTATION_DOCSET_TARGET_DIR}/${DOCUMENTAION_DOCSET_ID}" && + "${RSYNC}" -a --delete --cvs-exclude "${DOCUMENTATION_DOCSET_TEMP_DIR}/${DOCUMENTAION_DOCSET_ID}/" "${DOCUMENTATION_DOCSET_TARGET_DIR}/${DOCUMENTAION_DOCSET_ID}" && + "${RSYNC}" -a --delete --cvs-exclude "${DOCUMENTATION_DOCSET_TEMP_DIR}/${DOCUMENTAION_DOCSET_PACKAGED_FILE}" "${DOCUMENTATION_DOCSET_TARGET_DIR}" +if [ $? != 0 ] ; then echo "$0:$LINENO: error: Unable top copy the created DocSet to its final location."; exit 1; fi; + + +echo "$0:$LINENO: note: Clean build, touching timestamp."; +touch "${TIMESTAMP_FILE}"; diff --git a/Source/Documentation/Scripts/buildDocumentation.sh b/Source/Documentation/Scripts/buildDocumentation.sh index 0b85c32..025f30b 100755 --- a/Source/Documentation/Scripts/buildDocumentation.sh +++ b/Source/Documentation/Scripts/buildDocumentation.sh @@ -35,11 +35,9 @@ export PROJECT_NAME=${PROJECT_NAME:?"Environment variable PROJECT_NAME must exis export RSYNC=${RSYNC:?"Environment variable RSYNC must exist, aborting."} export SQLITE=${SQLITE:?"Environment variable SQLITE must exist, aborting."} -${PERL} -e 'require DBD::SQLite;' >/dev/null 2>&1 +"${PERL}" -e 'require DBD::SQLite;' >/dev/null 2>&1 if [ $? != 0 ]; then echo "$0:$LINENO: error: The perl module 'DBD::SQLite' must be installed in order to build the the target '${TARGETNAME}'."; exit 1; fi; -#cd "${PROJECT_DIR}" - TIMESTAMP_FILE="${DOCUMENTATION_TEMP_DIR}/buildDocumentation_timestamp" DOCS_UP_TO_DATE="No"; @@ -51,10 +49,10 @@ if [ -f "${TIMESTAMP_FILE}" ]; then if [ "${NEWER_FILES}" != "" ]; then DOCS_UP_TO_DATE="No"; fi; NEWER_FILES=`"${FIND}" "${DOCUMENTATION_SOURCE_DIR}" -newer "${TIMESTAMP_FILE}"`; if [ "${NEWER_FILES}" != "" ]; then DOCS_UP_TO_DATE="No"; fi; - if [ $DOCS_UP_TO_DATE == "No" ]; then echo "debug: There are newer source files, rebuilding documentation."; fi; + if [ $DOCS_UP_TO_DATE == "No" ]; then echo "$0:$LINENO: note: There are newer source files, rebuilding documentation."; fi; fi; -if [ $DOCS_UP_TO_DATE == "Yes" ]; then echo "debug: Documentation files are up to date."; exit 0; fi; +if [ $DOCS_UP_TO_DATE == "Yes" ]; then echo "$0:$LINENO: note: Documentation files are up to date."; exit 0; fi; # Clear the time stamp. It will be recreated if we are successful. rm -f "${TIMESTAMP_FILE}" @@ -109,13 +107,13 @@ else rm -rf "${DOCUMENTATION_TARGET_DIR}"/* fi -if [ ! -f ${DOCUMENTATION_TEMP_DIR}/cpp_defines.out ]; then +#if [ ! -f "${DOCUMENTATION_TEMP_DIR}/cpp_defines.out" ]; then echo "Extracting C Preprocessor #defines." - gcc -E -Wp,-dM -std=gnu99 -x objective-c -I${PROJECT_HEADERS_ROOT} ${PROJECT_HEADERS_DIR}/RegexKitPrivate.h > ${DOCUMENTATION_TEMP_DIR}/cpp_defines.out -fi + gcc -E -Wp,-dM -std=gnu99 -x objective-c "-I${PROJECT_HEADERS_ROOT}" "${PROJECT_HEADERS_DIR}/RegexKitPrivate.h" > "${DOCUMENTATION_TEMP_DIR}/cpp_defines.out" +#fi # Extract the documentation from the header files. -echo "$0:$LINENO: debug: Parsing headerdoc information from project headers into database." +echo "$0:$LINENO: note: Parsing headerdoc information from project headers into database." "${DOCUMENTATION_PARSE_HEADERS_SCRIPT}" "${PROJECT_HEADERS_DIR}"/*.h @@ -123,12 +121,12 @@ echo "$0:$LINENO: debug: Parsing headerdoc information from project headers into echo "Copying pcre HTML documentation from '${PCRE_HTML_DIR}'." if [ -d "${PCRE_HTML_DIR}" ]; then "${RSYNC}" -a --delete --cvs-exclude "${PCRE_HTML_DIR}/" "${DOCUMENTATION_TARGET_DIR}/pcre/" - if [ $PCRE_VERSION == "7.3" ]; then + if [ "${PCRE_VERSION}" == "7.3" ]; then "${SED}" -i "" -e 's/BACTRACKING/BACKTRACKING/g' "${DOCUMENTATION_TARGET_DIR}/pcre/pcrepattern.html" fi; else - echo "$0:$LINENO: error: The pcre HTML documentation directory ${PCRE_HTML_DIR} does not exist." - exit 1 + echo "$0:$LINENO: error: The pcre HTML documentation directory '${PCRE_HTML_DIR}' does not exist."; + exit 1; fi @@ -136,12 +134,12 @@ fi # A notable point is the TOC template executes the pcre_toc.pl script which parses through the PCRE # documentation files to generate a toc for it, along with the regex syntax toc section. -echo "$0:$LINENO: debug: Generating documentation HTML files." +echo "$0:$LINENO: note: Generating documentation HTML files." if [ ! -d "${GENERATED_HTML_DIR}" ]; then mkdir "${GENERATED_HTML_DIR}"; fi; # Replace PCRE_VERSION / PCRE_DATE comments with extracted values. -"${PERL}" -e 'while(<>){$in.=$_;} $in =~ s/<\!-- PCRE_VERSION -->/$ENV{'PCRE_VERSION'}/sg; $in =~ s/<\!-- PCRE_DATE -->/$ENV{'PCRE_DATE'}/sg; print($in);' "${DOCUMENTATION_TEMPLATES_DIR}/content.tmpl" >"${GENERATED_HTML_DIR}/content.html" +"${PERL}" -e 'while(<>){$in.=$_;} $in =~ s/<\!-- PCRE_VERSION -->/$ENV{"PCRE_VERSION"}/sg; $in =~ s/<\!-- PCRE_DATE -->/$ENV{"PCRE_DATE"}/sg; print($in);' "${DOCUMENTATION_TEMPLATES_DIR}/content.tmpl" >"${GENERATED_HTML_DIR}/content.html" # Execute the DOCUMENTATION_GENERATE_HTML_SCRIPT script. export SCRIPT_LINENO="$LINENO"; "${DOCUMENTATION_GENERATE_HTML_SCRIPT}" @@ -151,7 +149,7 @@ if [ $? != 0 ] ; then echo "$0:$LINENO: error: Documentation HTML generation fai echo "Generating all opened toc for non-JavaScript browsers." "${PERL}" -e 'while (<>) { $in.=$_; } $in =~ s/closed/open/sgi; $in =~ s/