]> err.no Git - sope/commitdiff
added --frameworks option to configure
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Sat, 20 Aug 2005 16:29:53 +0000 (16:29 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Sat, 20 Aug 2005 16:29:53 +0000 (16:29 +0000)
fixed makefiles for arbitary framework install locations
some code cleanups in EOExt.subproj

git-svn-id: http://svn.opengroupware.org/SOPE/trunk@1054 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

48 files changed:
configure
sope-appserver/GNUmakefile
sope-appserver/NGObjWeb/DynamicElements/WOString.api
sope-appserver/NGObjWeb/GNUmakefile.preamble
sope-appserver/NGXmlRpc/GNUmakefile.preamble
sope-appserver/SoOFS/GNUmakefile.preamble
sope-appserver/WEExtensions/GNUmakefile.preamble
sope-appserver/WOExtensions/GNUmakefile.preamble
sope-appserver/WOXML/GNUmakefile.preamble
sope-appserver/samples/CoreDataBlog/Main.wo/Main.wod
sope-appserver/umbrella.make
sope-core/EOControl/GNUmakefile.preamble
sope-core/EOCoreData/GNUmakefile.preamble
sope-core/NGExtensions/ChangeLog
sope-core/NGExtensions/EOExt.subproj/EOCompoundDataSource.m
sope-core/NGExtensions/EOExt.subproj/EODataSource+NGExtensions.m
sope-core/NGExtensions/EOExt.subproj/EOFetchSpecification+plist.m
sope-core/NGExtensions/EOExt.subproj/EOFilterDataSource.m
sope-core/NGExtensions/EOExt.subproj/EOKeyGrouping.m
sope-core/NGExtensions/EOExt.subproj/EOKeyMapDataSource.m
sope-core/NGExtensions/EOExt.subproj/README.txt [new file with mode: 0644]
sope-core/NGExtensions/GNUmakefile.preamble
sope-core/NGExtensions/Version
sope-core/NGStreams/GNUmakefile.preamble
sope-core/umbrella.make
sope-gdl1/GDLAccess/GNUmakefile.preamble
sope-gdl1/GDLContentStore/GNUmakefile.preamble
sope-gdl1/MySQL/GNUmakefile
sope-gdl1/MySQL/GNUmakefile.preamble
sope-gdl1/PostgreSQL/GNUmakefile
sope-gdl1/PostgreSQL/GNUmakefile.preamble
sope-gdl1/SQLite3/GNUmakefile
sope-gdl1/SQLite3/GNUmakefile.preamble
sope-ical/NGiCal/GNUmakefile.preamble
sope-ical/versitSaxDriver/GNUmakefile.preamble
sope-ldap/NGLdap/GNUmakefile.preamble
sope-mime/GNUmakefile.preamble
sope-mime/NGImap4/GNUmakefile.preamble
sope-mime/NGMail/GNUmakefile.preamble
sope-xml/ChangeLogSaxDriver/GNUmakefile.preamble
sope-xml/DOM/GNUmakefile.preamble
sope-xml/STXSaxDriver/GNUmakefile.preamble
sope-xml/SaxObjC/GNUmakefile.preamble
sope-xml/XmlRpc/GNUmakefile.preamble
sope-xml/libxmlSAXDriver/GNUmakefile.preamble
sope-xml/pyxSAXDriver/GNUmakefile.preamble
sope-xml/umbrella.make
sopex/SOPEX/GNUmakefile.preamble

index efd991e3b0788bda532b877a23bac47b473914e4..c05801b1144e74df81b0340e5557406b5a5da8f0 100755 (executable)
--- a/configure
+++ b/configure
@@ -14,6 +14,7 @@ CFG_ARGS="$0 $1 $2 $3 $4 $5 $6 $7 $8 $9"
 ARG_BEQUIET=0
 ARG_NOCREATE=0
 ARG_PREFIX=""
+ARG_FRAMEWORK_DIR=""
 ARG_GSMAKE="$GNUSTEP_MAKEFILES"
 ARG_CFGMAKE="$PWD/config.make"
 ARG_WITH_GNUSTEP=0
@@ -51,6 +52,7 @@ Configuration:
 
 Installation directories:
   --prefix=PREFIX        install files in PREFIX [/usr/local]
+  --frameworks=DIR        build frameworks and install in DIR
   --gsmake=PATH           path to gnustep-make tree
   --configmake=PATH       path to the config file being created
   --with-gnustep          install in GNUstep tree
@@ -68,7 +70,9 @@ function printParas() {
   echo "Configuration:"
   if test $ARG_BEQUIET  = 1; then echo "  will be quite.";  fi
   if test $ARG_NOCREATE = 1; then echo "  won't create files"; fi
-  if test $DARG_IS_FHS = 1;  then
+  if test "x$ARG_FRAMEWORK_DIR" != "x"; then
+    echo "  FHS:    install in frameworks directory"; 
+  elif test $DARG_IS_FHS = 1;  then
     echo "  FHS:    install in FHS root"; 
   else
     echo "  FHS:    install in GNUstep tree"; 
@@ -85,10 +89,11 @@ function printParas() {
     echo "  strip:  no";
   fi
   
-  echo "  prefix: $ARG_PREFIX"
-  echo "  gstep:  $ARG_GSMAKE"
-  echo "  config: $ARG_CFGMAKE"
-  echo "  script: $DARG_GNUSTEP_SH"
+  echo "  prefix:     $ARG_PREFIX"
+  echo "  frameworks: $ARG_FRAMEWORK_DIR"
+  echo "  gstep:      $ARG_GSMAKE"
+  echo "  config:     $ARG_CFGMAKE"
+  echo "  script:     $DARG_GNUSTEP_SH"
   echo ""
 }
 
@@ -200,12 +205,13 @@ function setupAppleArgs() {
     ARG_WITH_GNUSTEP=1
   fi
   
-  if test "x${xLIBRARY_COMBO}" != "xapple-apple-nil"; then
-    if test "x${LIBRARY_COMBO}" != "xapple-apple-apple"; then
-      echo "WARNING: detected MacOSX GNUstep setup: ${LIBRARY_COMBO}"
-      echo ""
-    fi
-  fi
+  # no reason to print a warning?
+  #if test "x${xLIBRARY_COMBO}" != "xapple-apple-nil"; then
+  #  if test "x${LIBRARY_COMBO}" != "xapple-apple-apple"; then
+  #    echo "WARNING: detected MacOSX GNUstep setup: ${LIBRARY_COMBO}"
+  #    echo ""
+  #  fi
+  #fi
 }
 
 function validateArgs() {
@@ -229,6 +235,11 @@ function validateArgs() {
            echo "Note: will install in GNUSTEP_LOCAL_ROOT: $ARG_PREFIX"
            echo ""
          fi
+        elif test "x$ARG_FRAMEWORK_DIR" != "x"; then
+          DARG_IS_FHS=0;
+          ARG_PREFIX="$ARG_FRAMEWORK_DIR"
+         echo "Note: will install in frameworks location: $ARG_PREFIX"
+         echo ""
         else
           DARG_IS_FHS=1;
           ARG_PREFIX="/usr/local/"
@@ -300,10 +311,18 @@ function genConfigMake() {
   
   # TODO: should be also write a GNUSTEP_INSTALLATION_DIR / BUNDLE_INSTALL_DIR?
   
-  if test $DARG_IS_FHS = 1; then
+  
+  if test "x$ARG_FRAMEWORK_DIR" != "x"; then
+    cfgwrite "# configured to install in Frameworks directory"
+    cfgwrite "FRAMEWORK_INSTALL_DIR:=${ARG_FRAMEWORK_DIR}"
+    cfgwrite "frameworks=yes"
+    cfgwrite ""
+  elif test $DARG_IS_FHS = 1; then
     cfgwrite "# configured for FHS install"
     cfgwrite "FHS_INSTALL_ROOT:=$ARG_PREFIX"
     cfgwrite ""
+  else
+    cfgwrite "# configured for GNUstep install"
   fi
   
   if test $ARG_WITH_DEBUG = 1; then
@@ -433,6 +452,10 @@ function processOption() {
        extractFuncValue $1;
         ARG_PREFIX="$VALUE";
        ;;
+    x--frameworks=*)
+       extractFuncValue $1;
+        ARG_FRAMEWORK_DIR="$VALUE";
+       ;;
     x--gsmake=*)
        extractFuncValue $1;
         ARG_GSMAKE="$VALUE";
index be6060169fa1044859721ff7316ef05c2b172a8f..ae522322cf8ee2ff9247c36f91632fe53b19a7db 100644 (file)
@@ -12,8 +12,23 @@ SUBPROJECTS += \
        WOExtensions    \
        WOXML           \
        SoOFS           \
-       NGXmlRpc        \
+       NGXmlRpc
+
+
+ifeq ($(frameworks),yes)
+include umbrella.make
+endif
+
+# project makefiles
 
 -include $(GNUSTEP_MAKEFILES)/GNUmakefile.preamble
+
+ifneq ($(only_umbrella),yes)
 include $(GNUSTEP_MAKEFILES)/aggregate.make
+endif
+
+ifeq ($(frameworks),yes)
+include $(GNUSTEP_MAKEFILES)/framework.make
+endif
+
 -include $(GNUSTEP_MAKEFILES)/GNUmakefile.postamble
index dd4893e1ff8eb73340fef140cc29a3a733fcb069..5823c80418cbb1720f6d36ef4bf7299559a605e9 100644 (file)
@@ -1,16 +1,18 @@
 <?xml version="1.0" standalone="yes"?> 
 
 <wo class="WOString">
-  <binding name="value" passthrough="NO" required="YES"/>
-  <binding name="escapeHTML" passthrough="NO" defaults="YES/NO"/>
+  <binding name="value"        passthrough="NO" required="YES"/>
+  <binding name="escapeHTML"   passthrough="NO" defaults="YES/NO"/>
   <binding name="numberformat" passthrough="NO" defaults="Number Format Strings"/>
   <binding name="dateformat" passthrough="NO" defaults="Date Format Strings"/>
-  <binding name="formatter" passthrough="NO"/>
+  <binding name="formatter"      passthrough="NO"/>
   <binding name="valueWhenEmpty" passthrough="NO"/>
 
   <!-- SOPE -->
-  <binding name="insertBR" passthrough="NO" defaults="YES/NO"/>
-  <binding name="style" passthrough="NO" />
+  <binding name="insertBR"       passthrough="NO" defaults="YES/NO"/>
+  <binding name="style"          passthrough="NO" />
+  <binding name="formatterClass" passthrough="NO" />
+  <binding name="format"         passthrough="NO" />
 
   <validation message="no more than one of &apos;dateformat&apos;, &apos;numberformat&apos;, or &apos;formatter&apos; may be bound">
     <count test="&gt;1">
index 80f24131e8ea1b08529d8bd3a23ca420e36bde9c..6d02aeb87a8df3803fbe3513914a5a2a8ee77d58 100644 (file)
@@ -1,11 +1,8 @@
 # compilation settings
 
-ifeq ($(FOUNDATION_LIB),apple)
 ifeq ($(frameworks),yes)
-NGObjWeb_INSTALL_DIR = /Library/Frameworks/
 ADDITIONAL_CPPFLAGS += -DCOMPILE_AS_FRAMEWORK=1
 endif
-endif
 
 SOPE_ROOT=../..
 
index 3f18f99761a6d8c7afa99f6bd8170102ca1e0d23..151780d17d23e3fcbe2ba3fdabe7ed8843ab717b 100644 (file)
@@ -3,10 +3,6 @@
 SOPE_ROOT=../..
 CORE_ROOT=$(SOPE_ROOT)/sope-core
 
-ifeq ($(FOUNDATION_LIB),apple)
-NGXmlRpc_INSTALL_DIR = /Library/Frameworks/
-endif
-
 ADDITIONAL_CPPFLAGS += -Wall -DCOMPILE_FOR_GSTEP_MAKE=1
 ADDITIONAL_OBJCFLAGS += -Wall -Wno-import -Wno-protocol
 
index 6a8f81629e1821309bb83595b51aba6d989143cc..f2c930b814eeba0bea0e4c8db540c4adb0e4eff8 100644 (file)
@@ -6,10 +6,6 @@ ADDITIONAL_OBJCFLAGS += -Wall -Wno-import -Wno-protocol
 SOPE_ROOT=../..
 CORE_ROOT=$(SOPE_ROOT)/sope-core
 
-ifeq ($(FOUNDATION_LIB),apple)
-SoOFS_INSTALL_DIR = /Library/Frameworks/
-endif
-
 ADDITIONAL_INCLUDE_DIRS += \
        -I.                     \
        -I..                    \
index 7a46e7e7b584275b6ce50f8449853368ff290dbb..06bbda2a79c47f483143945a1964b13938c71859 100644 (file)
@@ -2,12 +2,6 @@
 
 SOPE_ROOT=../..
 
-ifeq ($(FOUNDATION_LIB),apple)
-ifeq ($(frameworks),yes)
-WEExtensions_INSTALL_DIR = /Library/Frameworks/
-endif
-endif
-
 ADDITIONAL_CPPFLAGS += -Wall
 ADDITIONAL_INCLUDE_DIRS += \
        -I.. -I$(SOPE_ROOT) -I../NGObjWeb       \
index 34b1bd53bd667b35aa50e3be5aed3e40083dab2c..350dc8c3a3df88a9636e7b21cddaa441fe438a5a 100644 (file)
@@ -2,12 +2,6 @@
 
 SOPE_ROOT=../..
 
-ifeq ($(FOUNDATION_LIB),apple)
-ifeq ($(frameworks),yes)
-WOExtensions_INSTALL_DIR = /Library/Frameworks/
-endif
-endif
-
 ADDITIONAL_CPPFLAGS += -Wall
 ADDITIONAL_INCLUDE_DIRS += \
        -I.. -I$(SOPE_ROOT)                     \
index 628d4603a40444a6f433e053be43dc079804bcfb..30f4ddfbb32fd9971a4262c9deb462d5bac94b3a 100644 (file)
@@ -2,12 +2,6 @@
 
 SOPE_ROOT=../..
 
-ifeq ($(FOUNDATION_LIB),apple)
-ifeq ($(frameworks),yes)
-WOXML_INSTALL_DIR = /Library/Frameworks/
-endif
-endif
-
 libWOXML_SOVERSION=$(MAJOR_VERSION).$(MINOR_VERSION)
 libWOXML_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBMINOR_VERSION)
 
index bbcdd7b94cd15cae1fabcb7159df9a2c9c7cc214..0986ba40734c70d1752ae708ebb13536ea64ea7a 100644 (file)
@@ -32,7 +32,7 @@ PostSelectLink: WOHyperlink {
 }
 
 PostTitle: WOString {
-  value          = post.title;
+  value          = post.creationDate; // title;
   valueWhenEmpty = "[no title]";
 }
 
index 86fa39156fa5906f5652e4daf0223c892d6b02cf..d9679dab95fc169949c6ac826f2637508987a4b3 100644 (file)
@@ -17,8 +17,6 @@ sope-appserver_UMBRELLA_FRAMEWORKS = \
        NGXmlRpc        \
 
 sope-appserver_PREBIND_ADDR = # TODO
-sope-appserver_INSTALL_DIR  = /Library/Frameworks/
-
 
 # generic (consolidate in gstep-make)
 $(FRAMEWORK_NAME)_LDFLAGS += \
index 93f8b97cebf80c26576f36d33a4f404ebc6fb9c4..d4cdb0f98cf3c0cc140e86650e8742e3ff4c078e 100644 (file)
@@ -1,9 +1,5 @@
 # GNUstep Makefile
 
-ifeq ($(FOUNDATION_LIB),apple)
-EOControl_INSTALL_DIR = /Library/Frameworks/
-endif
-
 libEOControl_INCLUDE_DIRS += -I..
 
 ADDITIONAL_CPPFLAGS += -Wall -funsigned-char
index cf89f7f3100063955763bb479684a6d124e625c1..62e1aff03c5d6ac56404f9c624fd7b7ec1227b30 100644 (file)
@@ -1,9 +1,5 @@
 # GNUstep Makefile
 
-ifeq ($(FOUNDATION_LIB),apple)
-EOCoreData_INSTALL_DIR = /Library/Frameworks/
-endif
-
 ADDITIONAL_CPP_FLAGS += -Wall -Wno-import -Wno-protocol -O2
 
 libEOCoreData_INCLUDE_DIRS += -I..
index 2314cb1fdeeed2c1a32db4c63bf24086bea0928d..4e09191a7a09cca8cf4d9b8101bdbf1be8c2890b 100644 (file)
@@ -1,3 +1,7 @@
+2005-08-20  Helge Hess  <helge.hess@opengroupware.org>
+
+       * EOExt.subproj: code cleanups, added a README.txt (v4.5.172)
+
 2005-08-19  Helge Hess  <helge.hess@opengroupware.org>
 
        * added method to calculate a calendar matrix for a date representing
index 1a1fd9cef68ea0aad73e3816795e10f6a7b03f01..7928993d5dc3b1ab3f9e2850090ef6be7d829cf5 100644 (file)
 /* accessors */
 
 - (void)setSources:(NSArray *)_sources {
-  if (self->sources != _sources) {
-    _sources = [_sources shallowCopy];
-    [self->sources release];
-    self->sources = _sources;
-    {
-      NSNotificationCenter *nc;
-      NSEnumerator         *enumerator;
-      id                   obj;
+  NSNotificationCenter *nc;
+  NSEnumerator         *enumerator;
+  id                   obj;
       
-      nc         = [NSNotificationCenter defaultCenter];
-      enumerator = [self->sources objectEnumerator];
+  if (self->sources == _sources)
+    return;
+  
+  // BUG: this needs to unregister the old datssources!
+  _sources = [_sources shallowCopy];
+  [self->sources release];
+  self->sources = _sources;
+
+  nc         = [NSNotificationCenter defaultCenter];
+  enumerator = [self->sources objectEnumerator];
       
-      while ((obj = [enumerator nextObject])) {
-        [nc addObserver:self
-            selector:@selector(postDataSourceChangedNotification)
-            name:EODataSourceDidChangeNotification object:obj];
-      }
-    }
+  while ((obj = [enumerator nextObject]) != nil) {
+    [nc addObserver:self
+       selector:@selector(postDataSourceChangedNotification)
+       name:EODataSourceDidChangeNotification object:obj];
   }
   [self postDataSourceChangedNotification];
 }
 }
 
 - (void)setSortOrderings:(NSArray *)_so {
-  if (self->sortOrderings != _so) {
-    _so = [_so shallowCopy];
-    [self->sortOrderings release];
-    self->sortOrderings = _so;
-  }
+  if (self->sortOrderings == _so)
+    return;
+
+  _so = [_so shallowCopy];
+  [self->sortOrderings release];
+  self->sortOrderings = _so;
+  
   [self postDataSourceChangedNotification];
 }
 - (NSArray *)sortOrderings {
   if (objs == nil)
     return [NSArray array];
   
-  if ([self auxiliaryQualifier])
+  if ([self auxiliaryQualifier] != nil)
     objs = [objs filteredArrayUsingQualifier:[self auxiliaryQualifier]];
   
-  if ([self sortOrderings])
+  if ([self sortOrderings] != nil)
     objs = [objs sortedArrayUsingKeyOrderArray:[self sortOrderings]];
   
   return objs;
 
 - (id)createObject {
   unsigned count;
+  id newObj = nil;
   
   if ((count = [[self sources] count]) == 0)
-    return [super createObject];
+    newObj = [[super createObject] retain];
   else if (count == 1)
-    return [[[self sources] objectAtIndex:0] createObject];
+    newObj = [[[[self sources] objectAtIndex:0] createObject] retain];
   else {
     NSEnumerator *e;
     EODataSource *ds;
     
     e = [[self sources] objectEnumerator];
-    while ((ds = [e nextObject])) {
+    while ((ds = [e nextObject]) != nil) {
       id obj;
 
-      if ((obj = [ds createObject]))
-        return obj;
+      if ((obj = [ds createObject])) {
+        newObj = [obj retain];
+       break;
+      }
     }
     /* all datasources failed to create .. */
-    return [super createObject];
+    if (newObj == nil)
+      newObj = [[super createObject] retain];
   }
   [self postDataSourceChangedNotification];  
+  return [newObj autorelease];
 }
 
 - (void)updateObject:(id)_obj {
index d1bc5eb36704333228f7b7e551845fa503462222..7a696cad73a9c0952709bb6bf2cb3d57f9b0f9f2 100644 (file)
@@ -33,11 +33,11 @@ NGExtensions_DECLARE NSString *EONoFetchWithEmptyQualifierHint =
 - (void)setFetchSpecification:(EOFetchSpecification *)_fetchSpec {
   [self doesNotRecognizeSelector:_cmd];
 }
-
 - (EOFetchSpecification *)fetchSpecification {
   [self doesNotRecognizeSelector:_cmd];
   return nil;
 }
+
 - (void)updateObject:(id)_obj {
   [self doesNotRecognizeSelector:_cmd];
 }
index 8049e2e72deb24f021bc4a1aaa1448791c4f2ebe..48d5a59dc7d915624c0dff00b5fb03988c714365 100644 (file)
 @implementation EOFetchSpecification(plist)
 
 - (id)initWithDictionary:(NSDictionary *)_dictionary {
-  if ((self = [self init])) {
+  if ((self = [self init]) != nil) {
     id tmp;
+
+    // TODO: add groupings
     
-    if ((tmp = [_dictionary objectForKey:@"qualifier"])) {
+    if ((tmp = [_dictionary objectForKey:@"qualifier"]) != nil) {
       if ([tmp isKindOfClass:[NSDictionary class]])
         tmp = [EOQualifier qualifierToMatchAllValues:tmp];
       else
@@ -38,7 +40,7 @@
       [self setQualifier:tmp];
     }
     
-    if ((tmp = [_dictionary objectForKey:@"sortOrderings"])) {
+    if ((tmp = [_dictionary objectForKey:@"sortOrderings"]) != nil) {
       NSArray        *sos = nil;
       EOSortOrdering *so;
       
           if (so)
             [result addObject:so];
         }
-        sos = [NSArray arrayWithArray:result];
+        sos = [[NSArray alloc] initWithArray:result];
       }
       else {
         so = [[[EOSortOrdering alloc] initWithPropertyList:tmp owner:nil] 
                                autorelease];
           
-        if (so)
-          sos = [NSArray arrayWithObject:so];
+        if (so != nil) sos = [[NSArray alloc] initWithObjects:&so count:1];
       }
-      [self setSortOrderings:sos];
+      if (sos != nil) [self setSortOrderings:sos];
+      [sos release];
     }
     
-    if ((tmp = [_dictionary objectForKey:@"fetchLimit"])) {
+    if ((tmp = [_dictionary objectForKey:@"fetchLimit"]) != nil) {
       if ([tmp respondsToSelector:@selector(intValue)])
         [self setFetchLimit:[tmp intValue]];
       else
index cac5719b6b7baac0103092465a2a46f6c73fb73d..d47b4d76f5c5feaa0fffd7f59b82f1eb7c91bde8 100644 (file)
   
   objs = [[self source] fetchObjects];
   
-  if ([self auxiliaryQualifier])
+  if ([self auxiliaryQualifier] != nil)
     objs = [objs filteredArrayUsingQualifier:[self auxiliaryQualifier]];
 
   if ((groups = [self groupings]) != nil) {
 
     grouping = [groups lastObject];
     
-    if ((sos = [self sortOrderings]) != nil) {
+    if ((sos = [self sortOrderings]) != nil)
       [grouping setSortOrderings:sos];
-    }
+    
     groupDict = [objs arrayGroupedBy:grouping];
 
     allKeys = [groupDict allKeys];
     allKeys = [allKeys sortedArrayUsingSelector:@selector(compare:)];
     objs    = [groupDict flattenedArrayWithHint:cnt andKeys:allKeys];
   }
-  else if ([self sortOrderings])
+  else if ([self sortOrderings] != nil)
     objs = [objs sortedArrayUsingKeyOrderArray:[self sortOrderings]];
   
   objs = [objs copy];
 - (NSArray *)flattenedArrayWithHint:(unsigned int)_hint
   andKeys:(NSArray *)_keys
 {
+  /*
+    This works on a dictionary of arrays. It walks over the keys in the given
+    order and flattenes the value arrays into one array.
+  */
   NSMutableArray *result = nil;
   unsigned int   i, cnt;
   
index d2ce34a095c963e4326b35d31f3c0948b23d1799..368cf95dbf7dfe928a411e4f7f670883bbeb3d8f 100644 (file)
 
 /* accessors */
 
-- (NSString *)key {
-  return self->key;
-}
 - (void)setKey:(NSString *)_key {
   NSAssert1(_key != nil, @"%s: nil _key parameter", __PRETTY_FUNCTION__);
   ASSIGNCOPY(self->key, _key);
 }
+- (NSString *)key {
+  return self->key;
+}
 
 /* operations */
 
index b63d28022928691f61e034147b0c10e95529032a..700fd6094fc273e4a481e6f15bdf2991a4c34035 100644 (file)
   [self->entityKeys release]; self->entityKeys = nil;
   [self->mappedKeys release]; self->mappedKeys = nil;
   
-  if (_cd) {
+  if (_cd != nil) {
     NSMutableArray *ma;
     NSArray  *tmp;
     unsigned i, count;
     
     /* first, collect keys we need */
     
-    if ((tmp = [_cd attributeKeys]))
+    if ((tmp = [_cd attributeKeys]) != nil)
       [ma addObjectsFromArray:tmp];
-    if ((tmp = [_cd toOneRelationshipKeys]))
+    if ((tmp = [_cd toOneRelationshipKeys]) != nil)
       [ma addObjectsFromArray:tmp];
-    if ((tmp = [_cd toManyRelationshipKeys]))
+    if ((tmp = [_cd toManyRelationshipKeys]) != nil)
       [ma addObjectsFromArray:tmp];
     
     self->entityKeys = [ma copy];
 
     /* next, map those keys to the source-schema */
     
-    if (self->map) {
+    if (self->map != nil) {
       [ma removeAllObjects];
       for (i = 0, count = [entityKeys count]; i < count; i++) {
        NSString *mappedKey, *key;
 }
 
 - (void)setFetchSpecification:(EOFetchSpecification *)_fetchSpec {
-  if (![_fetchSpec isEqual:self->fspec]) {
-    /*
+  EOFetchSpecification *mappedSpec;
+  
+  if ([_fetchSpec isEqual:self->fspec])
+    return;
+
+  /*
       This saves the spec in the datasource and saves a mapped spec
       in the source datasource.
-    */
-    EOFetchSpecification *mappedSpec;
+  */
     
-    ASSIGN(self->fspec, _fetchSpec);
-    mappedSpec = [self mapFetchSpecification:self->fspec];
-    [self->source setFetchSpecification:mappedSpec];
+  ASSIGN(self->fspec, _fetchSpec);
+  mappedSpec = [self mapFetchSpecification:self->fspec];
+  [self->source setFetchSpecification:mappedSpec];
     
-    [self postDataSourceChangedNotification];
-  }
+  [self postDataSourceChangedNotification];
 }
 - (EOFetchSpecification *)fetchSpecification {
   return self->fspec;
   return fmt;
 }
 
-@end /* EOKeyMapDataSource */
-
-@implementation EOKeyMapDataSource(Private)
+/* private */
 
 - (void)_registerForSource:(id)_source {
   static NSNotificationCenter *nc = nil;
   [self postDataSourceChangedNotification];
 }
 
-@end /* EOKeyMapDataSource(Private) */
+@end /* EOKeyMapDataSource */
+
 
 @implementation EOKeyMapDataSourceEnumerator
 
 
 @end /* EOKeyMapDataSourceEnumerator */
 
+
 @implementation EOMappedObject
 
 - (id)initWithObject:(id)_object values:(NSDictionary *)_values {
diff --git a/sope-core/NGExtensions/EOExt.subproj/README.txt b/sope-core/NGExtensions/EOExt.subproj/README.txt
new file mode 100644 (file)
index 0000000..65890cc
--- /dev/null
@@ -0,0 +1,95 @@
+Extensions for EOControl
+========================
+
+This subproject contains categories and additional classes to enhance
+functionality provided by EOControl.
+
+
+General additions:
+a) plist init methods, like -initWithPropertyList:,
+   -initWithPropertyList:owner:, -initWithString:, -initWithDictionary:, etc
+
+
+DataSources
+===========
+
+General Additions
+*****************
+
+NGExtensions adds the following to datasources:
+a) standardized -setFetchSpecification:/-fetchSpecification
+b) -updateObject: for triggering updates in 'raw' datasources
+c) -postDataSourceChanged, to notify the system of changed datasource
+   fetch specifications
+
+EOCacheDataSource
+*****************
+
+A "regular" EODataSource in SOPE is not supposed to cache the results it
+fetches, it should just perform the raw fetch and then tidy up. To provide
+caching, you can wrap an arbitary datasource in an EOCacheDataSource which
+will manage the cache, perform on-demand loads etc.
+
+To keep the cache consistent, in SOPE a EODataSource is supposed to call
+-postDataSourceChanged when its fetch-specification changes in a way which
+would lead to different fetch results.
+
+(Notably an EODatabaseDataSource in EOF2 often has implicit caching in the
+ EOObjectStore/EOEditingContext, the above applies more to SOPE and OGo
+ datasources like the NGLdapDataSource, NGImap4FolderDataSource,
+ EOAdaptorDataSource etc).
+
+EOCompoundDataSource
+********************
+
+As the name suggests this datasource joins the results of other datasources
+into one.
+In the context of create/insert/delete/update operations, the datasource tries
+each of the child datasources in sequence until one of them succeeds in the
+delete and otherwise calls the super method.
+
+Finally this datasource has own sort-orderings and an own auxiliaryQualifier.
+
+EOFilterDataSource
+******************
+
+This datasource is somewhat similiar to EOCompoundDataSource but intended for
+subclassing and has just one source datasources. It provides own
+sort-orderings, groupings and an own auxiliaryQualifier.
+It can be used as-is to add grouping capabilities to datasources.
+
+EOKeyMapDataSource
+******************
+TODO: document
+- EOMappedObject
+- EOKeyMapDataSourceEnumerator
+
+
+Grouping
+========
+
+TODO document.
+
+- Groupings on an EODataSource still return an array, but one sorted by the
+  'grouping keys'. Remember that the grouping does *not* need to be a plain
+  KVC key but can be arbitary.
+
+- You can add grouping facilities to arbitary datasources using
+  EOFilterDataSource.
+
+Convenience methods
+*******************
+NSArray
+- (NSArray *)arrayGroupedBy:(EOGrouping *)_grouping;
+
+EOFetchSpecification:
+- setGroupings:(NSArray *)_groupings; // sets 'EOGroupingHint'
+- (NSArray *)groupings;
+
+Classes
+*******
+  <NSObject>
+    EOGrouping
+      EOGroupingSet
+      EOKeyGrouping
+      EOQualifierGrouping
index 36baadc9e4610c66499838c65c0e1e27602e404b..5c3c0fb572a0b9523353b16aee9c3019831c58b7 100644 (file)
@@ -1,9 +1,5 @@
 # compilation settings
 
-ifeq ($(FOUNDATION_LIB),apple)
-NGExtensions_INSTALL_DIR = /Library/Frameworks/
-endif
-
 ADDITIONAL_INCLUDE_DIRS += \
        -I./NGExtensions/       \
        -I./FdExt.subproj/ -I./EOExt.subproj/
index ea40701b21da1f77072748d32b118281e90c1c1e..b48bfcaa5ec7c8e02afcb0a41c0e86afd18f7d57 100644 (file)
@@ -1,6 +1,6 @@
 # version
 
-SUBMINOR_VERSION:=171
+SUBMINOR_VERSION:=172
 
 # v4.3.115 requires libFoundation v1.0.59
 # v4.2.72  requires libEOControl  v4.2.39
index e3e00ec4f6b5be7c0533099732cb67501cb61541..25f2e99a14bed69d331600ed40c8d35342b21cf6 100644 (file)
@@ -1,9 +1,5 @@
 # compilation settings
 
-ifeq ($(FOUNDATION_LIB),apple)
-NGStreams_INSTALL_DIR = /Library/Frameworks/
-endif
-
 libNGStreams_INCLUDE_DIRS += \
        -I$(GNUSTEP_TARGET_CPU)/$(GNUSTEP_TARGET_OS) \
        -INGStreams             \
index a0bd3d562d49dee612a69874d6a47855de7d3b29..c1d9a04c8e8f35e4d0e685a96207fea44e93ba5a 100644 (file)
@@ -14,7 +14,6 @@ sope-core_UMBRELLA_FRAMEWORKS = \
        NGStreams       \
 
 sope-core_PREBIND_ADDR = # TODO
-sope-core_INSTALL_DIR  = /Library/Frameworks/
 
 
 # generic (consolidate in gstep-make)
index ad5fc654b850b5068ba0fee19549d0f34a71d162..b8b6232ba44f38e2f3b2fe6d07f1c9c82ead1a34 100644 (file)
@@ -2,12 +2,6 @@
 
 SOPE_ROOT=../..
 
-ifeq ($(FOUNDATION_LIB),apple)
-ifeq ($(frameworks),yes)
-GDLAccess_INSTALL_DIR = /Library/Frameworks/
-endif
-endif
-
 ADDITIONAL_CPPFLAGS += -Wall
 
 ADDITIONAL_CPPFLAGS += \
index 848e2f9d82b36502662816a23488fc9973e938b7..5e5e6002d56037b43aa18352a785b697661dc56e 100644 (file)
@@ -2,10 +2,6 @@
 
 SOPE_ROOT=../..
 
-ifeq ($(FOUNDATION_LIB),apple)
-GDLContentStore_INSTALL_DIR = /Library/Frameworks/
-endif
-
 ADDITIONAL_CPPFLAGS += -Wall
 
 ADDITIONAL_INCLUDE_DIRS += -I. -I..
index 15bb557387f636f00143dd466f866cde5fb5ae87..2ae5c04fd2a0a68e12b4375890957f595fed11cf 100644 (file)
@@ -46,8 +46,7 @@ MySQL_OBJC_FILES = \
 
 MySQL_PRINCIPAL_CLASS = MySQL4Adaptor
 
-BUNDLE_INSTALL     = MySQL
-BUNDLE_INSTALL_DIR = $(GNUSTEP_INSTALLATION_DIR)/Library/GDLAdaptors-$(MAJOR_VERSION).$(MINOR_VERSION)/
+BUNDLE_INSTALL = MySQL
 
 # Use .gdladaptor as the bundle extension
 BUNDLE_EXTENSION = .gdladaptor
index 88add3d2276c9fdae16bf6759f3a7c4d71021501..29f4a5e84bd848ed96cf5434df02a12a5193aab2 100644 (file)
 # If not, write to the Free Software Foundation,
 # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
+SOPE_ROOT=../..
+
+ifeq ($(frameworks),yes)
+BUNDLE_INSTALL_DIR := $(FRAMEWORK_INSTALL_DIR)/GDLAccess.framework/Resources/GDLAdaptors/
+else
+BUNDLE_INSTALL_DIR = $(GNUSTEP_INSTALLATION_DIR)/Library/GDLAdaptors-$(MAJOR_VERSION).$(MINOR_VERSION)/
+endif
+
+
 MySQL_BUNDLE_LIBS += \
        -lGDLAccess     \
        -lEOControl     \
@@ -41,27 +50,29 @@ gdltest_TOOL_LIBS += \
 ADDITIONAL_CFLAGS += `mysql_config --cflags`
 
 ADDITIONAL_INCLUDE_DIRS += \
-       -I../GDLAccess -I.. -I../..
+       -I../GDLAccess -I.. -I$(SOPE_ROOT)
 
 ADDITIONAL_INCLUDE_DIRS += \
-       -I../../sope-core/              \
-       -I../../sope-core/NGExtensions
-       
-ifneq ($(GNUSTEP_BUILD_DIR),)
-RELBUILD_DIR_SOPE=$(GNUSTEP_BUILD_DIR)/../..
-RELBUILD_DIR_Core=$(RELBUILD_DIR_SOPE)/sope-core
-RELBUILD_DIR_Gdl1=$(RELBUILD_DIR_SOPE)/sope-gdl1
+       -I$(SOPE_ROOT)/sope-core/               \
+       -I$(SOPE_ROOT)/sope-core/NGExtensions
+
+
+# dependencies
+
+
+# library/framework search pathes
+
+DEP_DIRS = \
+       ../GDLAccess \
+       $(SOPE_ROOT)/sope-core/EOControl
 
+ifneq ($(frameworks),yes)
 ADDITIONAL_LIB_DIRS += \
-       -L$(RELBUILD_DIR_Core)/EOControl/$(GNUSTEP_OBJ_DIR_NAME)        \
-       -L$(RELBUILD_DIR_Gdl1)/GDLAccess/$(GNUSTEP_OBJ_DIR_NAME)        \
-       -L$(GNUSTEP_BUILD_DIR)/$(GNUSTEP_OBJ_DIR_NAME)
+       $(foreach dir,$(DEP_DIRS),\
+         -L$(GNUSTEP_BUILD_DIR)/$(dir)/$(GNUSTEP_OBJ_DIR_NAME))
 else
 ADDITIONAL_LIB_DIRS += \
-       -L../GDLAccess/$(GNUSTEP_OBJ_DIR)\
-       -L../../sope-core/EOControl/$(GNUSTEP_OBJ_DIR)
+       $(foreach dir,$(DEP_DIRS),-F$(GNUSTEP_BUILD_DIR)/$(dir))
 endif
 
-SYSTEM_LIB_DIR += \
-       -L/usr/local/lib                \
-       -L/usr/lib
+SYSTEM_LIB_DIR += -L/usr/local/lib -L/usr/lib
index cfcce03fd4c3da725998c8ddb7221a2f5302eb90..9d502dea858ee37817ef244e2a2dfbd6711ab791 100644 (file)
@@ -48,7 +48,6 @@ PostgreSQL_OBJC_FILES = \
 PostgreSQL_PRINCIPAL_CLASS = PostgreSQL72Adaptor
 
 BUNDLE_INSTALL     = PostgreSQL
-BUNDLE_INSTALL_DIR = $(GNUSTEP_INSTALLATION_DIR)/Library/GDLAdaptors-$(MAJOR_VERSION).$(MINOR_VERSION)/
 
 # Use .gdladaptor as the bundle extension
 BUNDLE_EXTENSION = .gdladaptor
index ba7e2e029a5ebe06c604d3466982fb4cd92e5202..220b5d4cd143f9b4ec196d61a2b310ef5e31b5e5 100644 (file)
 
 SOPE_ROOT=../..
 
+ifeq ($(frameworks),yes)
+BUNDLE_INSTALL_DIR := $(FRAMEWORK_INSTALL_DIR)/GDLAccess.framework/Resources/GDLAdaptors/
+else
+BUNDLE_INSTALL_DIR = $(GNUSTEP_INSTALLATION_DIR)/Library/GDLAdaptors-$(MAJOR_VERSION).$(MINOR_VERSION)/
+endif
+
+
 # PG config
 
 ADDITIONAL_INCLUDE_DIRS += -I$(shell pg_config --includedir)
index 1d928ad413589b3bc62c02061c775589c980e72b..e723c0f17e619154e607ec701521bb15492cd06e 100644 (file)
@@ -47,7 +47,6 @@ SQLite3_OBJC_FILES = \
 SQLite3_PRINCIPAL_CLASS = SQLiteAdaptor
 
 BUNDLE_INSTALL     = SQLite3
-BUNDLE_INSTALL_DIR = $(GNUSTEP_INSTALLATION_DIR)/Library/GDLAdaptors-$(MAJOR_VERSION).$(MINOR_VERSION)/
 
 # Use .gdladaptor as the bundle extension
 BUNDLE_EXTENSION = .gdladaptor
index bd7190fbac84acde1a66bffd3969b6b46b0f1800..8620c94cf1fd9fc5fc87c0a7208a9f59891d2883 100644 (file)
 
 SOPE_ROOT=../..
 
+ifeq ($(frameworks),yes)
+BUNDLE_INSTALL_DIR := $(FRAMEWORK_INSTALL_DIR)/GDLAccess.framework/Resources/GDLAdaptors/
+else
+BUNDLE_INSTALL_DIR = $(GNUSTEP_INSTALLATION_DIR)/Library/GDLAdaptors-$(MAJOR_VERSION).$(MINOR_VERSION)/
+endif
+
+
 # SQLite3 config
 
 SQLite3_BUNDLE_LIBS += -lsqlite3
index 649f3bd1cf4c545f206312352f2aa8a6f32d4f9d..c7e2334c3e39941aa4c49665ffe380194e297855 100644 (file)
@@ -2,10 +2,6 @@
 
 SOPE_ROOT=../..
 
-ifeq ($(FOUNDATION_LIB),apple)
-NGiCal_INSTALL_DIR = /Library/Frameworks/
-endif
-
 ADDITIONAL_CPPFLAGS += \
         -Wall -DCOMPILE_FOR_GSTEP_MAKE=1        \
         -DSOPE_MAJOR_VERSION=$(MAJOR_VERSION)   \
index c9a09c650ea005dddc4d04e02b51400b51bc1bde..d9dfed07d68d196a6d3d189f425902c9bddfdf39 100644 (file)
@@ -3,10 +3,10 @@
 SOPE_ROOT=../..
 SOPE_OBJ_ROOT=$(GNUSTEP_BUILD_DIR)/$(SOPE_ROOT)
 
-ifeq ($(FOUNDATION_LIB),apple)
 ifeq ($(frameworks),yes)
-BUNDLE_INSTALL_DIR := /Library/SaxDrivers-$(MAJOR_VERSION).$(MINOR_VERSION)/
-endif
+# hm, we might prefer /Library/SaxDrivers-$(MAJOR_VERSION).$(MINOR_VERSION)/
+# but this is harder with the FRAMEWORK_INSTALL_DIR
+BUNDLE_INSTALL_DIR := $(FRAMEWORK_INSTALL_DIR)/SaxObjC.framework/Resources/SaxDrivers/
 endif
 
 
index 2c287dc71d8f8fe0d686f648ccb7d12e156df811..e374b012c2e52bc8648627c594c9ba9d65fd117b 100644 (file)
@@ -2,10 +2,6 @@
 
 SOPE_ROOT=../..
 
-ifeq ($(FOUNDATION_LIB),apple)
-NGLdap_INSTALL_DIR = /Library/Frameworks/
-endif
-
 ADDITIONAL_INCLUDE_DIRS += \
        -I..                            \
        -I../../sope-core/NGExtensions  \
index 5a0160868b496d70259429f224edd75e692c435f..5aafc26643a2df467412f0bbc76fc33b4cb421c2 100644 (file)
@@ -2,10 +2,6 @@
 
 SOPE_ROOT=..
 
-ifeq ($(FOUNDATION_LIB),apple)
-NGMime_INSTALL_DIR = /Library/Frameworks/
-endif
-
 ADDITIONAL_CPPFLAGS += -DLIBRARY_MAJOR_VERSION=${MAJOR_VERSION} \
                       -DLIBRARY_MINOR_VERSION=${MINOR_VERSION} \
                       -DLIBRARY_SUBMINOR_VERSION=${SUBMINOR_VERSION} \
index 53246c3875d78775a73f67e62739ed4f48b7ac65..5de60118bed8bf89c537c0fa88b5af120e4fb264 100644 (file)
@@ -2,10 +2,6 @@
 
 SOPE_ROOT=../..
 
-ifeq ($(FOUNDATION_LIB),apple)
-NGImap4_INSTALL_DIR = /Library/Frameworks/
-endif
-
 NGImap4_INCLUDE_DIRS += \
        -I.. -I$(SOPE_ROOT)                     \
        -I$(SOPE_ROOT)/sope-core/NGStreams/     \
index f573542030f82339418538c48f582ce5f58f3ede..84d35b88e4a3528a09dec7f4eeb2a2d2f62e57ab 100644 (file)
@@ -2,10 +2,6 @@
 
 SOPE_ROOT=../..
 
-ifeq ($(FOUNDATION_LIB),apple)
-NGMail_INSTALL_DIR = /Library/Frameworks/
-endif
-
 NGMail_INCLUDE_DIRS += \
        -I.. -I$(SOPE_ROOT)                     \
        -I$(SOPE_ROOT)/sope-core/NGStreams/     \
index 40030fe886393f60c4a8628f2f4ea3cf9a31de89..15ab56454b4e2749d37bd5a02b94adcabb10f920 100644 (file)
@@ -1,9 +1,7 @@
 # compilation settings
 
-ifeq ($(FOUNDATION_LIB),apple)
 ifeq ($(frameworks),yes)
-BUNDLE_INSTALL_DIR := /Library/Frameworks/SaxObjC.framework/Resources/SaxDrivers/
-endif
+BUNDLE_INSTALL_DIR := $(FRAMEWORK_INSTALL_DIR)/SaxObjC.framework/Resources/SaxDrivers/
 endif
 
 
index ca22d697505487e1281d1cfc69e9794a6c243598..9342d2a5a9c21c541ae453dd7fea37b2cb940cb7 100644 (file)
@@ -1,9 +1,5 @@
 # compilation settings
 
-ifeq ($(FOUNDATION_LIB),apple)
-DOM_INSTALL_DIR = /Library/Frameworks/
-endif
-
 ADDITIONAL_INCLUDE_DIRS += -I.. -I../..
 
 libDOM_LIBRARIES_DEPEND_UPON += -lSaxObjC
index c32aa313423cb62a90adcf3cd7b88fd34ee14bc9..05ec80aac29ec72848812a24b968d6f14bde43b7 100644 (file)
@@ -1,9 +1,7 @@
 # compilation settings
 
-ifeq ($(FOUNDATION_LIB),apple)
 ifeq ($(frameworks),yes)
-BUNDLE_INSTALL_DIR := /Library/Frameworks/SaxObjC.framework/Resources/SaxDrivers/
-endif
+BUNDLE_INSTALL_DIR := $(FRAMEWORK_INSTALL_DIR)/SaxObjC.framework/Resources/SaxDrivers/
 endif
 
 
index 846c317ba5f8190cd1dec0dea8818d7d0b357716..2db2bdde043c68ccc56b86ce8731e75ddb6d4c9b 100644 (file)
@@ -1,11 +1,5 @@
 # compilation settings
 
-ifeq ($(FOUNDATION_LIB),apple)
-ifeq ($(frameworks),yes)
-SaxObjC_INSTALL_DIR = /Library/Frameworks/
-endif
-endif
-
 ADDITIONAL_CPPFLAGS += \
         -Wall -DCOMPILE_FOR_GSTEP_MAKE=1        \
         -DSOPE_MAJOR_VERSION=$(MAJOR_VERSION)   \
index ea0a30c3719af677455ef98643e40928fa69554e..6c94d0afd7116006865e54fd67612f6d8fc89f0c 100644 (file)
@@ -1,9 +1,5 @@
 # compilation settings
 
-ifeq ($(FOUNDATION_LIB),apple)
-XmlRpc_INSTALL_DIR = /Library/Frameworks/
-endif
-
 libXmlRpc_LIBRARIES_DEPEND_UPON += -lSaxObjC -lDOM
 
 ifneq ($(GNUSTEP_BUILD_DIR),)
index 36c777071e9c4cdb438f5d58ad607c40d65623f1..bfbd132b1d2ed5af65d8992b40f91a62b7c08c1d 100644 (file)
@@ -1,9 +1,7 @@
 # compilation settings
 
-ifeq ($(FOUNDATION_LIB),apple)
 ifeq ($(frameworks),yes)
-BUNDLE_INSTALL_DIR := /Library/Frameworks/SaxObjC.framework/Resources/SaxDrivers/
-endif
+BUNDLE_INSTALL_DIR := $(FRAMEWORK_INSTALL_DIR)/SaxObjC.framework/Resources/SaxDrivers/
 endif
 
 
index 1c93ba1db5864f0b441f29e41d2a398abc0bdccc..f6a67d64ca4c212be9570aa2bcd2e3ca997f0eb2 100644 (file)
@@ -1,9 +1,7 @@
 # compilation settings
 
-ifeq ($(FOUNDATION_LIB),apple)
 ifeq ($(frameworks),yes)
-BUNDLE_INSTALL_DIR := /Library/Frameworks/SaxObjC.framework/Resources/SaxDrivers/
-endif
+BUNDLE_INSTALL_DIR := $(FRAMEWORK_INSTALL_DIR)/SaxObjC.framework/Resources/SaxDrivers/
 endif
 
 pyxSAXDriver_RESOURCE_FILES = bundle-info.plist
index a281ba7ec23378e52c535de36ec38d869a184c5c..a761c82c0ed7ecfc49a2d2d6460177f46c277197 100644 (file)
@@ -12,7 +12,6 @@ sope-xml_UMBRELLA_FRAMEWORKS = \
        XmlRpc
 
 sope-xml_PREBIND_ADDR = 0xC0FF0000
-sope-xml_INSTALL_DIR  = /Library/Frameworks/
 
 
 # generic (consolidate in gstep-make)
index 5e1f4ee8bb915898bd7c1bce5d1e8a16d1b331b9..874f80fe7dadb004ca19133c80982b094c6e4d2f 100644 (file)
@@ -2,8 +2,6 @@
 
 SOPE_ROOT=../..
 
-SOPEX_INSTALL_DIR = /Library/Frameworks/
-
 SOPEX_LIBRARIES_DEPEND_UPON += \
        -framework WebKit       \
        -framework AppKit       \