ARG_BEQUIET=0
ARG_NOCREATE=0
ARG_PREFIX=""
+ARG_FRAMEWORK_DIR=""
ARG_GSMAKE="$GNUSTEP_MAKEFILES"
ARG_CFGMAKE="$PWD/config.make"
ARG_WITH_GNUSTEP=0
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
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";
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 ""
}
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() {
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/"
# 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
extractFuncValue $1;
ARG_PREFIX="$VALUE";
;;
+ x--frameworks=*)
+ extractFuncValue $1;
+ ARG_FRAMEWORK_DIR="$VALUE";
+ ;;
x--gsmake=*)
extractFuncValue $1;
ARG_GSMAKE="$VALUE";
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
<?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 'dateformat', 'numberformat', or 'formatter' may be bound">
<count test=">1">
# compilation settings
-ifeq ($(FOUNDATION_LIB),apple)
ifeq ($(frameworks),yes)
-NGObjWeb_INSTALL_DIR = /Library/Frameworks/
ADDITIONAL_CPPFLAGS += -DCOMPILE_AS_FRAMEWORK=1
endif
-endif
SOPE_ROOT=../..
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
SOPE_ROOT=../..
CORE_ROOT=$(SOPE_ROOT)/sope-core
-ifeq ($(FOUNDATION_LIB),apple)
-SoOFS_INSTALL_DIR = /Library/Frameworks/
-endif
-
ADDITIONAL_INCLUDE_DIRS += \
-I. \
-I.. \
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 \
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) \
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)
}
PostTitle: WOString {
- value = post.title;
+ value = post.creationDate; // title;
valueWhenEmpty = "[no title]";
}
NGXmlRpc \
sope-appserver_PREBIND_ADDR = # TODO
-sope-appserver_INSTALL_DIR = /Library/Frameworks/
-
# generic (consolidate in gstep-make)
$(FRAMEWORK_NAME)_LDFLAGS += \
# GNUstep Makefile
-ifeq ($(FOUNDATION_LIB),apple)
-EOControl_INSTALL_DIR = /Library/Frameworks/
-endif
-
libEOControl_INCLUDE_DIRS += -I..
ADDITIONAL_CPPFLAGS += -Wall -funsigned-char
# 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..
+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
/* 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 {
- (void)setFetchSpecification:(EOFetchSpecification *)_fetchSpec {
[self doesNotRecognizeSelector:_cmd];
}
-
- (EOFetchSpecification *)fetchSpecification {
[self doesNotRecognizeSelector:_cmd];
return nil;
}
+
- (void)updateObject:(id)_obj {
[self doesNotRecognizeSelector:_cmd];
}
@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
[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
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;
/* 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 */
[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 {
--- /dev/null
+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
# compilation settings
-ifeq ($(FOUNDATION_LIB),apple)
-NGExtensions_INSTALL_DIR = /Library/Frameworks/
-endif
-
ADDITIONAL_INCLUDE_DIRS += \
-I./NGExtensions/ \
-I./FdExt.subproj/ -I./EOExt.subproj/
# version
-SUBMINOR_VERSION:=171
+SUBMINOR_VERSION:=172
# v4.3.115 requires libFoundation v1.0.59
# v4.2.72 requires libEOControl v4.2.39
# compilation settings
-ifeq ($(FOUNDATION_LIB),apple)
-NGStreams_INSTALL_DIR = /Library/Frameworks/
-endif
-
libNGStreams_INCLUDE_DIRS += \
-I$(GNUSTEP_TARGET_CPU)/$(GNUSTEP_TARGET_OS) \
-INGStreams \
NGStreams \
sope-core_PREBIND_ADDR = # TODO
-sope-core_INSTALL_DIR = /Library/Frameworks/
# generic (consolidate in gstep-make)
SOPE_ROOT=../..
-ifeq ($(FOUNDATION_LIB),apple)
-ifeq ($(frameworks),yes)
-GDLAccess_INSTALL_DIR = /Library/Frameworks/
-endif
-endif
-
ADDITIONAL_CPPFLAGS += -Wall
ADDITIONAL_CPPFLAGS += \
SOPE_ROOT=../..
-ifeq ($(FOUNDATION_LIB),apple)
-GDLContentStore_INSTALL_DIR = /Library/Frameworks/
-endif
-
ADDITIONAL_CPPFLAGS += -Wall
ADDITIONAL_INCLUDE_DIRS += -I. -I..
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
# 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 \
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
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
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)
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
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
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) \
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
SOPE_ROOT=../..
-ifeq ($(FOUNDATION_LIB),apple)
-NGLdap_INSTALL_DIR = /Library/Frameworks/
-endif
-
ADDITIONAL_INCLUDE_DIRS += \
-I.. \
-I../../sope-core/NGExtensions \
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} \
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/ \
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/ \
# 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
# compilation settings
-ifeq ($(FOUNDATION_LIB),apple)
-DOM_INSTALL_DIR = /Library/Frameworks/
-endif
-
ADDITIONAL_INCLUDE_DIRS += -I.. -I../..
libDOM_LIBRARIES_DEPEND_UPON += -lSaxObjC
# 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
# 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) \
# compilation settings
-ifeq ($(FOUNDATION_LIB),apple)
-XmlRpc_INSTALL_DIR = /Library/Frameworks/
-endif
-
libXmlRpc_LIBRARIES_DEPEND_UPON += -lSaxObjC -lDOM
ifneq ($(GNUSTEP_BUILD_DIR),)
# 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
# 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
XmlRpc
sope-xml_PREBIND_ADDR = 0xC0FF0000
-sope-xml_INSTALL_DIR = /Library/Frameworks/
# generic (consolidate in gstep-make)
SOPE_ROOT=../..
-SOPEX_INSTALL_DIR = /Library/Frameworks/
-
SOPEX_LIBRARIES_DEPEND_UPON += \
-framework WebKit \
-framework AppKit \