New port: www/sogo

SOGo is a fully supported and trusted groupware server with a focus on
scalability and open standards. It provides a rich AJAX-based Web
interface and supports multiple native clients through the use of
standard protocols such as CalDAV, CardDAV and GroupDAV.

WWW: http://sogo.nu/

PR:		200750
Submitted by:	Euan Thoms <euan@potensol.com>
This commit is contained in:
Kurt Jaeger 2015-09-23 05:30:12 +00:00
parent 81c0e673d8
commit d59002293e
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=397608
20 changed files with 2850 additions and 0 deletions

1
GIDs
View file

@ -237,6 +237,7 @@ tcpcryptd:*:841:
munin:*:842: munin:*:842:
dahdi:*:843:asterisk dahdi:*:843:asterisk
subsonic:*:844: subsonic:*:844:
sogod:*:845:
fossy:*:901:www fossy:*:901:www
scanlogd:*:902: scanlogd:*:902:
_ocserv:*:903: _ocserv:*:903:

1
UIDs
View file

@ -242,6 +242,7 @@ netdisco:*:840:840::0:0:netdisco daemon:/nonexistent:/usr/sbin/nologin
tcpcryptd:*:841:841::0:0:tcpcrypt daemon:/nonexistent:/usr/sbin/nologin tcpcryptd:*:841:841::0:0:tcpcrypt daemon:/nonexistent:/usr/sbin/nologin
munin:*:842:842::0:0:Munin:/var/munin:/usr/sbin/nologin munin:*:842:842::0:0:Munin:/var/munin:/usr/sbin/nologin
subsonic:*:844:844::0:0:Subsonic standalone-server:/nonexistent:/usr/sbin/nologin subsonic:*:844:844::0:0:Subsonic standalone-server:/nonexistent:/usr/sbin/nologin
sogod:*:845:845::0:0:SOGo groupware:/nonexistent:/usr/sbin/nologin
fossy:*:901:901::0:0:FOSSology user:/usr/local/share/fossology:/usr/local/bin/bash fossy:*:901:901::0:0:FOSSology user:/usr/local/share/fossology:/usr/local/bin/bash
scanlogd:*:902:902::0:0:scanlogd user:/nonexistent:/usr/sbin/nologin scanlogd:*:902:902::0:0:scanlogd user:/nonexistent:/usr/sbin/nologin
_ocserv:*:903:903::0:0:ocserv user:/nonexistent:/usr/sbin/nologin _ocserv:*:903:903::0:0:ocserv user:/nonexistent:/usr/sbin/nologin

View file

@ -2030,6 +2030,7 @@
SUBDIR += smarty3 SUBDIR += smarty3
SUBDIR += smb_auth SUBDIR += smb_auth
SUBDIR += snarf SUBDIR += snarf
SUBDIR += sogo
SUBDIR += spawn-fcgi SUBDIR += spawn-fcgi
SUBDIR += spdylay SUBDIR += spdylay
SUBDIR += speedtest-mini SUBDIR += speedtest-mini

54
www/sogo/Makefile Normal file
View file

@ -0,0 +1,54 @@
# Created by: Euan Thoms <euan@potensol.com>
# $FreeBSD$
PORTNAME= sogo
PORTVERSION= 2.3.2
CATEGORIES= www gnustep
MASTER_SITES= http://www.sogo.nu/files/downloads/SOGo/Sources/
DISTNAME= SOGo-${PORTVERSION}
MAINTAINER= euan@potensol.com
COMMENT= Groupware server with a focus on scalability and open standards
LICENSE= GPLv2
BUILD_DEPENDS= ${GNUSTEP_LOCAL_LIBRARIES}/libDOM.so:${PORTSDIR}/devel/sope
LIB_DEPENDS= libmemcached.so:${PORTSDIR}/databases/libmemcached \
libcurl.so:${PORTSDIR}/ftp/curl
RUN_DEPENDS:= ${BUILD_DEPENDS}
MAKE_JOBS_UNSAFE=yes
USERS= sogod
GROUPS= sogod
USES= gnustep objc
USE_GNUSTEP= base build
USE_LDCONFIG= ${GNUSTEP_LOCAL_LIBRARIES}/sogo
USE_RC_SUBR= sogod
SUB_LIST+= GNUSTEP_LOCAL_TOOLS=${GNUSTEP_LOCAL_TOOLS} \
GNUSTEP_MAKEFILES=${GNUSTEP_MAKEFILES}
CONFIGURE_ARGS= --disable-debug --enable-strip
.include <bsd.port.options.mk>
post-patch:
${GREP} -rlF '/etc/sogo' ${WRKSRC} \
| ${XARGS} ${REINPLACE_CMD} 's#/etc/sogo#${PREFIX}/etc/sogo#g'
do-configure:
cd ${WRKSRC} ; . ${GNUSTEP_MAKEFILES}/GNUstep.sh ; ./configure ${CONFIGURE_ARGS}
post-stage:
${MKDIR} ${STAGEDIR}/var/spool/sogo
${MKDIR} ${STAGEDIR}${ETCDIR}
(cp ${WRKSRC}/Scripts/sogo.conf ${STAGEDIR}${ETCDIR}/sogo.conf.sample)
(cp ${FILESDIR}/expire-autoreply.creds.sample ${STAGEDIR}${ETCDIR}/)
(cp ${FILESDIR}/ealarms-notify.creds.sample ${STAGEDIR}${ETCDIR}/)
(cp ${FILESDIR}/cron-ealarms-notify.sample ${STAGEDIR}${PREFIX}/GNUstep/Local/Tools/Admin/)
(cp ${FILESDIR}/cron-expire-autoreply.sample ${STAGEDIR}${PREFIX}/GNUstep/Local/Tools/Admin/)
.include <bsd.port.mk>

2
www/sogo/distinfo Normal file
View file

@ -0,0 +1,2 @@
SHA256 (SOGo-2.3.2.tar.gz) = 7830e2ad684b54c89a4720edf7e73250a076885a3e25052c093e7894227939ac
SIZE (SOGo-2.3.2.tar.gz) = 11781695

View file

@ -0,0 +1,7 @@
#!/bin/sh
TZ=Europe/London; export TZ
PATH=$PATH:/usr/local/GNUstep/System/Tools; export PATH
. /usr/local/GNUstep/System/Library/Makefiles/GNUstep.sh
/usr/local/GNUstep/Local/Tools/Admin/sogo-ealarms-notify -p /usr/local/etc/sogo/ealarms-notify.creds >> /var/log/sogo/cron-ealarms-notify.log 2>&1

View file

@ -0,0 +1,7 @@
#!/bin/sh
TZ=Europe/London; export TZ
PATH=$PATH:/usr/local/GNUstep/System/Tools; export PATH
. /usr/local/GNUstep/System/Library/Makefiles/GNUstep.sh
/usr/local/GNUstep/Local/Tools/Admin/sogo-tool expire-autoreply -p /usr/local/etc/sogo/expire-autoreply.creds > /var/log/sogo/cron-expire-autoreply.out 2>&1

View file

@ -0,0 +1 @@
username:password

View file

@ -0,0 +1 @@
username:password

View file

@ -0,0 +1,8 @@
--- Main/GNUmakefile.preamble.orig 2015-09-16 18:41:29 UTC
+++ Main/GNUmakefile.preamble
@@ -22,4 +22,4 @@ $(SOGOD)_TOOL_LIBS += \
-lNGObjWeb \
-lNGMime -lNGLdap \
-lNGStreams -lNGExtensions -lEOControl \
- -lDOM -lSaxObjC
+ -lDOM -lSaxObjC -lSBJson

View file

@ -0,0 +1,12 @@
--- SoObjects/SOGo/GNUmakefile.orig 2015-09-16 18:41:36 UTC
+++ SoObjects/SOGo/GNUmakefile
@@ -203,7 +203,8 @@ ifneq ($(FHS_INSTALL_ROOT),)
GNUSTEP_HEADERS=$(DESTDIR)$(FHS_INSTALL_ROOT)/include
endif
GNUSTEP_TARGET_LDIR=sogo
-include $(GNUSTEP_MAKEFILES)/framework.make
+
+include master-framework.make
include $(GNUSTEP_MAKEFILES)/library.make
include $(GNUSTEP_MAKEFILES)/tool.make
-include GNUmakefile.postamble

View file

@ -0,0 +1,13 @@
--- SoObjects/SOGo/NSData+Crypto.m.orig 2015-09-16 18:41:31 UTC
+++ SoObjects/SOGo/NSData+Crypto.m
@@ -23,10 +23,6 @@
* Boston, MA 02111-1307, USA.
*/
-#ifndef __OpenBSD__
-#include <crypt.h>
-#endif
-
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

View file

@ -0,0 +1,824 @@
--- SoObjects/SOGo/instance-framework.make.orig 2015-09-23 03:39:02 UTC
+++ SoObjects/SOGo/instance-framework.make
@@ -0,0 +1,821 @@
+# -*-makefile-*-
+# Instance/framework.make
+#
+# Instance Makefile rules to build GNUstep-based frameworks.
+#
+# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2010 Free Software Foundation, Inc.
+#
+# Author: Mirko Viviani <mirko.viviani@rccr.cremona.it>
+# Author: Nicola Pero <nicola.pero@meta-innovation.com>
+#
+# This file is part of the GNUstep Makefile Package.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# You should have received a copy of the GNU General Public
+# License along with this library; see the file COPYING.
+# If not, write to the Free Software Foundation,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Frameworks usually link against a gui library (if available). If
+# you don't need a gui library, use xxx_NEEDS_GUI = no.
+ifeq ($(NEEDS_GUI),)
+ NEEDS_GUI = yes
+endif
+
+ifeq ($(RULES_MAKE_LOADED),)
+include $(GNUSTEP_MAKEFILES)/rules.make
+endif
+
+.PHONY: internal-framework-all_ \
+ build-framework \
+ internal-framework-build-headers \
+ build-framework-dirs \
+ internal-framework-install_ \
+ internal-framework-distclean \
+ internal-framework-clean \
+ internal-framework-uninstall_ \
+ internal-framework-run-compile-submake \
+ internal-framework-compile
+
+# The name of the framework is in the FRAMEWORK_NAME variable.
+# The list of framework resource files are in xxx_RESOURCE_FILES
+# The list of framework web server resource files are in
+# xxx_WEBSERVER_RESOURCE_FILES
+# The list of localized framework resource files is in
+# xxx_LOCALIZED_RESOURCE_FILES
+# The list of localized framework web server resource files is in
+# xxx_WEBSERVER_LOCALIZED_RESOURCE_FILES
+# The list of framework GSWeb components are in xxx_COMPONENTS
+# The list of languages the framework supports is in xxx_LANGUAGES
+# The list of framework resource directories are in xxx_RESOURCE_DIRS
+# The list of framework subprojects directories are in xxx_SUBPROJECTS
+# The name of the principal class is xxx_PRINCIPAL_CLASS
+# The header files are in xxx_HEADER_FILES
+# The directory where the header files are located is xxx_HEADER_FILES_DIR
+# (defaults to ./)
+# The directory where to install the header files inside the library
+# installation directory is xxx_HEADER_FILES_INSTALL_DIR
+# (defaults to the framework name [without .framework]). Can't be `.'
+# The list of framework web server resource directories are in
+# xxx_WEBSERVER_RESOURCE_DIRS
+# The list of localized framework web server GSWeb components are in
+# xxx_WEBSERVER_LOCALIZED_RESOURCE_DIRS
+# xxx_CURRENT_VERSION_NAME is the compiled version name (default "0")
+# xxx_MAKE_CURRENT_VERSION is used to decide if the framework version
+# we compiling should be made the current/default version or not
+# (default is "yes")
+#
+# where xxx is the framework name
+#
+#
+# The HEADER_FILES_INSTALL_DIR might look somewhat weird - because in
+# most if not all cases, you want it to be the framework name. At the
+# moment, it allows you to put headers for framework XXX in directory
+# YYY, so that you can refer to them by using #include
+# <YYY/MyHeader.h> rather than #include <XXX/MyHeader.h>. It seems to
+# be mostly used to have a framework with name XXX work as a drop-in
+# replacement for another framework, which has name YYY -- and which
+# might be installed at the same time :-).
+#
+# If you want to insert your own entries into Info.plist (or
+# Info-gnustep.plist) you should create a xxxInfo.plist file (where
+# xxx is the framework name) and gnustep-make will automatically
+# read it and merge it into Info-gnustep.plist.
+#
+
+# Set VERSION from xxx_VERSION
+ifneq ($($(GNUSTEP_INSTANCE)_VERSION),)
+ VERSION = $($(GNUSTEP_INSTANCE)_VERSION)
+endif
+
+ifeq ($(VERSION),)
+ VERSION = 0.0.1
+endif
+
+# By setting xxx_INTERFACE_VERSION you can change the soversion used
+# when linking the library. See comments in library.make for the
+# variables with the same name for libraries.
+ifeq ($($(GNUSTEP_INSTANCE)_INTERFACE_VERSION),)
+ # By default, if VERSION is 1.0.0, INTERFACE_VERSION is 1
+ INTERFACE_VERSION = $(word 1,$(subst ., ,$(VERSION)))
+else
+ INTERFACE_VERSION = $($(GNUSTEP_INSTANCE)_INTERFACE_VERSION)
+endif
+
+# CURRENT_VERSION_NAME is the name of the version as used when
+# building the library structure. We recommend just using
+# INTERFACE_VERSION for that, so your resources and your shared
+# library have the same versioning.
+
+# Warning - the following variable is also used in Master/rules.make
+# to build the OWNING_PROJECT_HEADER_DIR for the framework's
+# subprojects. Make sure you keep them in sync if you change them.
+CURRENT_VERSION_NAME = $($(GNUSTEP_INSTANCE)_CURRENT_VERSION_NAME)
+ifeq ($(CURRENT_VERSION_NAME),)
+ CURRENT_VERSION_NAME = $(INTERFACE_VERSION)
+endif
+
+# xxx_MAKE_CURRENT_VERSION can be set to 'no' if you do not want the
+# framework version that we are building from becoming the Current
+# one.
+ifneq ($($(GNUSTEP_INSTANCE)_MAKE_CURRENT_VERSION),)
+ MAKE_CURRENT_VERSION = $($(GNUSTEP_INSTANCE)_MAKE_CURRENT_VERSION)
+endif
+
+ifeq ($(MAKE_CURRENT_VERSION),)
+ MAKE_CURRENT_VERSION = yes
+endif
+
+# If there are no working symlinks, common.make sets
+# FRAMEWORK_VERSION_SUPPORT to no, which unconditionally turn
+# versioning off. This means that we create no symlinks inside the
+# xxx.framework directory for the various versions; that everything is
+# put top-level as in the case of bundles. So with
+# FRAMEWORK_VERSION_SUPPORT = no, the Directory structure is:
+#
+# xxx.framework/libframework.dll.a
+# xxx.framework/framework.dll
+# xxx.framework/Resources
+# xxx.framework/Headers
+#
+# The Headers, libframework.dll.a and framework.dll are then copied into
+# the standard header/library locations so that they can be found by
+# compiler/linker. Given that there are no symlinks, there is no other
+# way of doing this.
+ifeq ($(FRAMEWORK_VERSION_SUPPORT),no)
+ MAKE_CURRENT_VERSION = no
+endif
+
+# This is used on Apple to build frameworks which can be embedded into
+# applications. You usually set it to something like
+# @executable_path/../Frameworks and then you can embed the framework
+# in an application.
+DYLIB_INSTALL_NAME_BASE = $($(GNUSTEP_INSTANCE)_DYLIB_INSTALL_NAME_BASE)
+
+FRAMEWORK_DIR_NAME = $(GNUSTEP_INSTANCE).framework
+FRAMEWORK_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_DIR_NAME)
+
+ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
+ FRAMEWORK_VERSION_DIR_NAME = $(FRAMEWORK_DIR_NAME)/Versions/$(CURRENT_VERSION_NAME)
+else
+ FRAMEWORK_VERSION_DIR_NAME = $(FRAMEWORK_DIR_NAME)
+endif
+
+FRAMEWORK_VERSION_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_VERSION_DIR_NAME)
+
+# This is not doing much at the moment, it is only defining
+# HEADER_FILES, HEADER_SUBDIRS, HEADER_FILES_DIR and
+# HEADER_FILES_INSTALL_DIR in the standard way. Please note that
+# HEADER_FILES might be empty even if we have headers in subprojects
+# that we need to manage and install. So we assume by default that we
+# have some headers even if HEADER_FILES is empty.
+include $(GNUSTEP_MAKEFILES)/Instance/Shared/headers.make
+
+# On windows, this is unfortunately required.
+ifeq ($(BUILD_DLL), yes)
+ LINK_AGAINST_ALL_LIBS = yes
+endif
+
+ifeq ($(LINK_AGAINST_ALL_LIBS), yes)
+ # Link against all libs ... but not the one we're compiling! (not sure
+ # when this could happen with frameworks, anyway it makes sense)
+ LIBRARIES_DEPEND_UPON += $(filter-out -l$(GNUSTEP_INSTANCE), $(ALL_LIBS))
+endif
+
+INTERNAL_LIBRARIES_DEPEND_UPON = \
+ $(ALL_LIB_DIRS) \
+ $(LIBRARIES_DEPEND_UPON)
+
+ifeq ($(FOUNDATION_LIB),gnu)
+
+ # On GNUstep, build our dummy class to store information which
+ # gnustep-base can find at run time.
+
+ # An ObjC class name can not contain '-', but some people '-' this
+ # in framework names. So we need to encode the '-' in some way
+ # into an ObjC class name. (since we're there, we also encode '+'
+ # even if that's not really common).
+
+ # What we do is, we use '_' as an escape character, and encode (in the
+ # order) as follows:
+ #
+ # '_' is converted to '__'
+ # '-' is converted to '_0'
+ # '+' is converted to '_1'
+ #
+
+ # For example, 'Renaissance-Experimental' becomes
+ # 'Renaissance_0Experimental'.
+
+ # GNUstep-base will convert the name back by applying the reverse rules
+ # in the reverse order.
+
+ DUMMY_FRAMEWORK = NSFramework_$(subst +,_1,$(subst -,_0,$(subst _,__,$(GNUSTEP_INSTANCE))))
+ DUMMY_FRAMEWORK_FILE = $(DERIVED_SOURCES_DIR)/$(DUMMY_FRAMEWORK).m
+ DUMMY_FRAMEWORK_OBJ_FILE = $(addprefix $(GNUSTEP_OBJ_INSTANCE_DIR)/,$(DUMMY_FRAMEWORK).o)
+
+ # The following file will hold the list of classes compiled into the
+ # framework, ready to be included in the .plist file. We include the
+ # list of classes twice, in the object file itself (for when the
+ # framework is loaded) and in the .plist (for tools which let you
+ # browse in frameworks on disk and see lists of classes). Please note
+ # that reading the class list from the .plist requires gnustep-base to
+ # have properly located the framework bundle on disk, while reading
+ # the list from the object file itself does not (and so it's more
+ # likely to work in a portable way), which is why we still save the
+ # list in the object file rather than only putting it in the .plist.
+ # Maybe this point should be discarded, and we should only store the class
+ # list in the .plist file.
+ DUMMY_FRAMEWORK_CLASS_LIST = $(DERIVED_SOURCES_DIR)/$(GNUSTEP_INSTANCE)-class-list
+endif
+
+FRAMEWORK_HEADER_FILES = $(addprefix $(FRAMEWORK_VERSION_DIR)/Headers/,$(HEADER_FILES))
+FRAMEWORK_HEADER_SUBDIRS = $(addprefix $(FRAMEWORK_VERSION_DIR)/Headers/,$(HEADER_SUBDIRS))
+
+# FIXME - do we really those variables too ?
+ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
+ FRAMEWORK_CURRENT_DIR_NAME = $(FRAMEWORK_DIR_NAME)/Versions/Current
+else
+ FRAMEWORK_CURRENT_DIR_NAME = $(FRAMEWORK_DIR_NAME)
+endif
+
+FRAMEWORK_CURRENT_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_CURRENT_DIR_NAME)
+FRAMEWORK_LIBRARY_DIR_NAME = $(FRAMEWORK_VERSION_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)
+FRAMEWORK_LIBRARY_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_LIBRARY_DIR_NAME)
+FRAMEWORK_CURRENT_LIBRARY_DIR_NAME = $(FRAMEWORK_CURRENT_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)
+FRAMEWORK_CURRENT_LIBRARY_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)
+
+ifneq ($(BUILD_DLL), yes)
+
+FRAMEWORK_LIBRARY_FILE = lib$(GNUSTEP_INSTANCE)$(SHARED_LIBEXT)
+ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin)
+# On Mac OS X the version number conventionally precedes the shared
+# library suffix, e.g., libgnustep-base.1.16.1.dylib.
+VERSION_FRAMEWORK_LIBRARY_FILE = lib$(GNUSTEP_INSTANCE).$(VERSION)$(SHARED_LIBEXT)
+SONAME_FRAMEWORK_FILE = lib$(GNUSTEP_INSTANCE).$(INTERFACE_VERSION)$(SHARED_LIBEXT)
+else
+VERSION_FRAMEWORK_LIBRARY_FILE = $(FRAMEWORK_LIBRARY_FILE).$(VERSION)
+SONAME_FRAMEWORK_FILE = $(FRAMEWORK_LIBRARY_FILE).$(INTERFACE_VERSION)
+endif
+
+else # BUILD_DLL
+
+# When you build a DLL, you have to install it in a directory which is
+# in your PATH.
+ifeq ($(DLL_INSTALLATION_DIR),)
+ DLL_INSTALLATION_DIR = $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR)
+endif
+
+# When we build a DLL, we also pass -DBUILD_lib{library_name}_DLL=1 to
+# the preprocessor. With the new DLL support, this is usually not
+# needed; but in some cases some symbols are difficult and have to be
+# exported/imported manually. For these cases, the library header
+# files can use this preprocessor define to know that they are
+# included during compilation of the library itself, or are being
+# imported by external code. Typically with the new DLL support if a
+# symbol can't be imported you have to mark it with
+# __declspec(dllimport) when the library is not being compiled.
+# __declspec(dllexport) is not particularly useful instead.
+
+CLEAN_framework_NAME = $(subst -,_,$(GNUSTEP_INSTANCE))
+SHARED_CFLAGS += -DBUILD_$(CLEAN_framework_NAME)_DLL=1
+
+# FRAMEWORK_LIBRARY_FILE is the import library, libRenaissance.dll.a
+FRAMEWORK_LIBRARY_FILE = lib$(GNUSTEP_INSTANCE)$(DLL_LIBEXT)$(LIBEXT)
+VERSION_FRAMEWORK_LIBRARY_FILE = $(FRAMEWORK_LIBRARY_FILE)
+SONAME_FRAMEWORK_FILE = $(FRAMEWORK_LIBRARY_FILE)
+
+# LIB_LINK_DLL_FILE is the DLL library, Renaissance-0.dll
+# (cygRenaissance-0.dll on Cygwin). Include the INTERFACE_VERSION in
+# the DLL library name. Applications are linked explicitly to this
+# INTERFACE_VERSION of the library; this works exactly in the same way
+# as under Unix.
+LIB_LINK_DLL_FILE = $(DLL_PREFIX)$(GNUSTEP_INSTANCE)-$(subst .,_,$(INTERFACE_VERSION))$(DLL_LIBEXT)
+
+FRAMEWORK_OBJ_EXT = $(DLL_LIBEXT)
+endif # BUILD_DLL
+
+FRAMEWORK_FILE_NAME = $(FRAMEWORK_LIBRARY_DIR_NAME)/$(VERSION_FRAMEWORK_LIBRARY_FILE)
+FRAMEWORK_FILE = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_FILE_NAME)
+
+ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
+ FRAMEWORK_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
+endif
+
+ifeq ($(FRAMEWORK_INSTALL_DIR),)
+ FRAMEWORK_INSTALL_DIR = $(GNUSTEP_FRAMEWORKS)
+endif
+
+#
+# Now prepare the variables which are used by target-dependent commands
+# defined in target.make
+#
+LIB_LINK_OBJ_DIR = $(FRAMEWORK_LIBRARY_DIR)
+LIB_LINK_VERSION_FILE = $(VERSION_FRAMEWORK_LIBRARY_FILE)
+LIB_LINK_SONAME_FILE = $(SONAME_FRAMEWORK_FILE)
+LIB_LINK_FILE = $(FRAMEWORK_LIBRARY_FILE)
+LIB_LINK_INSTALL_DIR = $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_LIBRARY_DIR_NAME)
+
+ifneq ($(DYLIB_INSTALL_NAME_BASE),)
+ LIB_LINK_INSTALL_NAME = $(DYLIB_INSTALL_NAME_BASE)/$(FRAMEWORK_FILE_NAME)
+else
+ # Use a relative path for easy relocation.
+ LIB_LINK_INSTALL_NAME = $(GNUSTEP_INSTANCE).framework/$(GNUSTEP_INSTANCE)
+
+ # On Mac OS X, set absolute install_name if requested
+ ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin)
+ ifeq ($(GNUSTEP_ABSOLUTE_INSTALL_PATHS), yes)
+ LIB_LINK_INSTALL_NAME = $(LIB_LINK_INSTALL_DIR)/$(GNUSTEP_INSTANCE)
+ endif
+ endif
+endif
+
+
+GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(FRAMEWORK_VERSION_DIR)/Resources
+include $(GNUSTEP_MAKEFILES)/Instance/Shared/bundle.make
+
+internal-framework-all_:: $(GNUSTEP_OBJ_INSTANCE_DIR) $(OBJ_DIRS_TO_CREATE) \
+ build-framework
+# If they specified Info-gnustep.plist in the xxx_RESOURCE_FILES,
+# print a warning. They are supposed to provide a xxxInfo.plist which
+# gets merged with the automatically generated entries to generate
+# Info-gnustep.plist.
+ifneq ($(FOUNDATION_LIB), apple)
+ ifneq ($(filter Info-gnustep.plist,$($(GNUSTEP_INSTANCE)_RESOURCE_FILES)),)
+ $(WARNING_INFO_GNUSTEP_PLIST)
+ endif
+else
+ ifneq ($(filter Info.plist,$($(GNUSTEP_INSTANCE)_RESOURCE_FILES)),)
+ $(WARNING_INFO_PLIST)
+ endif
+endif
+
+internal-framework-build-headers:: $(FRAMEWORK_VERSION_DIR)/Headers \
+ $(FRAMEWORK_HEADER_SUBDIRS) \
+ $(FRAMEWORK_HEADER_FILES) \
+ build-framework-dirs
+
+ifeq ($(MAKE_CURRENT_VERSION),yes)
+
+# A target to build/reset the Current symlink to point to the newly
+# compiled framework. Only executed if MAKE_CURRENT_VERSION is yes,
+# and only executed if the symlink doesn't exist yet, or if
+# FRAMEWORK_VERSION_DIR is newer than the symlink. This is to avoid
+# rebuilding the symlink every single time, which is a waste of time.
+UPDATE_CURRENT_SYMLINK_RULE = $(FRAMEWORK_DIR)/Versions/Current
+$(FRAMEWORK_DIR)/Versions/Current: $(FRAMEWORK_VERSION_DIR)
+ $(ECHO_UPDATING_VERSION_SYMLINK)cd $(FRAMEWORK_DIR)/Versions; \
+ $(RM_LN_S) Current; \
+ $(LN_S) $(CURRENT_VERSION_NAME) Current$(END_ECHO)
+
+else
+UPDATE_CURRENT_SYMLINK_RULE =
+endif
+
+# FIXME/TODO - the following rule is always executed. This is stupid.
+# We should have some decent dependencies so that it's not executed if
+# there is nothing to build. :-)
+
+# Please note that test -h must be used instead of test -L because on
+# old Sun Solaris, test -h works but test -L does not.
+build-framework-dirs: $(DERIVED_SOURCES_DIR) \
+ $(FRAMEWORK_LIBRARY_DIR) \
+ $(FRAMEWORK_VERSION_DIR)/Resources \
+ $(FRAMEWORK_RESOURCE_DIRS) \
+ $(UPDATE_CURRENT_SYMLINK_RULE)
+ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
+ $(ECHO_NOTHING)cd $(FRAMEWORK_DIR); \
+ if [ ! -h "Resources" ]; then \
+ $(RM_LN_S) Resources; \
+ $(LN_S_RECURSIVE) Versions/Current/Resources Resources; \
+ fi; \
+ if [ ! -h "Headers" ]; then \
+ $(RM_LN_S) Headers; \
+ $(LN_S_RECURSIVE) Versions/Current/Headers Headers; \
+ fi$(END_ECHO)
+endif
+ $(ECHO_NOTHING)cd $(DERIVED_SOURCES_DIR); \
+ if [ ! -h "$(HEADER_FILES_INSTALL_DIR)" ]; then \
+ $(RM_LN_S) ./$(HEADER_FILES_INSTALL_DIR); \
+ $(LN_S_RECURSIVE) ../$(FRAMEWORK_DIR_NAME)/Headers \
+ ./$(HEADER_FILES_INSTALL_DIR); \
+ fi$(END_ECHO)
+
+$(FRAMEWORK_LIBRARY_DIR):
+ $(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
+
+$(FRAMEWORK_VERSION_DIR)/Headers:
+ $(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
+
+$(FRAMEWORK_HEADER_SUBDIRS):
+ $(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
+
+$(DERIVED_SOURCES_DIR): $(DERIVED_SOURCES_DIR)/.stamp
+$(DERIVED_SOURCES_DIR)/.stamp:
+ $(ECHO_CREATING)$(MKDIRS) $(DERIVED_SOURCES_DIR); \
+ touch $@$(END_ECHO)
+
+# Need to share this code with the headers code ... but how.
+
+# IMPORTANT: It is tempting to have a file (a header, in this case)
+# depend on the directory in which we want to create it (the
+# .../Headers/ directory in this case). The idea being that make
+# would automatically create the directory before the file. That
+# might work for a single file, but could trigger spurious rebuilds if
+# you have more than one file in the directory. The first file will
+# create the directory, then create the file. The second file will be
+# created inside the directory; but on some filesystems, creating the
+# file inside the directory then updates the 'last modified' timestamp
+# of the directory. So next time you run make, the directory is
+# 'newer' than the first file, and because the first file depends on
+# the directory, make will determine that it needs to be updated,
+# triggering a spurious recreation of the file. If you also have
+# auto-dependencies turned on, this might in turn cause recompilation
+# and further spurious rebuilding to happen.
+$(FRAMEWORK_VERSION_DIR)/Headers/%.h: $(HEADER_FILES_DIR)/%.h
+ $(ECHO_CREATING)$(INSTALL_DATA) $< $@$(END_ECHO)
+
+OBJC_OBJ_FILES_TO_INSPECT = $(OBJC_OBJ_FILES) $(SUBPROJECT_OBJ_FILES)
+
+# FIXME - We should not depend on GNUmakefile - rather we should use
+# Instance/Shared/stamp-string.make if we need to depend on the value
+# of some make variables. That would also detect a change in
+# FRAMEWORK_INSTALL_DIR from the command line, not currently covered
+# at the moment!
+#
+# To get the list of all classes, we use
+# $(EXTRACT_CLASS_NAMES_COMMAND), which is defined in target.make
+#
+#
+# The following rule will also build the DUMMY_FRAMEWORK_CLASS_LIST
+# file. This file is always created/deleted at the same time as the
+# DUMMY_FRAMEWORK_FILE.
+$(DUMMY_FRAMEWORK_FILE): $(DERIVED_SOURCES_DIR)/.stamp $(OBJ_FILES_TO_LINK) GNUmakefile
+ $(ECHO_CREATING) classes=""; \
+ for object_file in $(OBJC_OBJ_FILES_TO_INSPECT) __dummy__; do \
+ if [ "$$object_file" != "__dummy__" ]; then \
+ sym=`$(EXTRACT_CLASS_NAMES_COMMAND)`; \
+ classes="$$classes $$sym"; \
+ fi; \
+ done; \
+ classlist=""; \
+ classarray=""; \
+ for f in $$classes __dummy__ ; do \
+ if [ "$$f" != "__dummy__" ]; then \
+ if [ "$$classlist" = "" ]; then \
+ classlist="@\"$$f\""; \
+ classarray="(\"$$f\""; \
+ else \
+ classlist="$$classlist, @\"$$f\""; \
+ classarray="$$classarray, \"$$f\""; \
+ fi; \
+ fi; \
+ done; \
+ if [ "$$classlist" = "" ]; then \
+ classlist="NULL"; \
+ classarray="()"; \
+ else \
+ classlist="$$classlist, NULL"; \
+ classarray="$$classarray)"; \
+ fi; \
+ echo "$$classarray" > $(DUMMY_FRAMEWORK_CLASS_LIST); \
+ echo "#include <Foundation/NSObject.h>" > $@; \
+ echo "#include <Foundation/NSString.h>" > $@; \
+ echo "@interface $(DUMMY_FRAMEWORK) : NSObject" >> $@; \
+ echo "+ (NSString *)frameworkEnv;" >> $@; \
+ echo "+ (NSString *)frameworkPath;" >> $@; \
+ echo "+ (NSString *)frameworkVersion;" >> $@; \
+ echo "+ (NSString *const*)frameworkClasses;" >> $@; \
+ echo "@end" >> $@; \
+ echo "@implementation $(DUMMY_FRAMEWORK)" >> $@; \
+ echo "+ (NSString *)frameworkEnv { return nil; }" >> $@; \
+ echo "+ (NSString *)frameworkPath { return @\"/usr/local/GNUstep/Local/Library/Frameworks\"; }" >> $@; \
+ echo "+ (NSString *)frameworkVersion { return @\"$(CURRENT_VERSION_NAME)\"; }" >> $@; \
+ echo "static NSString *allClasses[] = {$$classlist};" >> $@; \
+ echo "+ (NSString *const*)frameworkClasses { return allClasses; }" >> $@;\
+ echo "@end" >> $@$(END_ECHO)
+
+ifeq ($(FOUNDATION_LIB),gnu)
+$(DUMMY_FRAMEWORK_OBJ_FILE): $(DUMMY_FRAMEWORK_FILE)
+ $(ECHO_COMPILING)$(CC) $< -c $(ALL_CPPFLAGS) $(ALL_OBJCFLAGS) -o $@$(END_ECHO)
+endif
+
+ifeq ($(FOUNDATION_LIB),gnu)
+ FRAMEWORK_INFO_PLIST_FILE = Info-gnustep.plist
+else
+ FRAMEWORK_INFO_PLIST_FILE = Info.plist
+endif
+
+ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
+build-framework: internal-framework-run-compile-submake \
+ shared-instance-bundle-all \
+ $(FRAMEWORK_VERSION_DIR)/Resources/$(FRAMEWORK_INFO_PLIST_FILE) \
+ $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)
+else
+build-framework: internal-framework-run-compile-submake \
+ shared-instance-bundle-all \
+ $(FRAMEWORK_VERSION_DIR)/Resources/$(FRAMEWORK_INFO_PLIST_FILE)
+endif
+
+ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin)
+# When building native frameworks on Apple, we need to create a
+# top-level symlink xxx.framework/xxx ---> the framework shared
+# library. On Darwin (non-Apple) we do this as well since we can partially
+# emulate frameworks (see the ld_lib_path.sh comments on this).
+
+# Please note that the following keeps the top-level symlink pointing
+# to the framework in Current. This is always correct, even if what
+# we are compiling is not made the Current framework version, but if
+# what we are compiling is not made the Current framework version, I
+# think it's not our business to touch the Current stuff, so let's
+# ignore it. It's faster to ignore it anyway. ;-)
+$(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR):
+ $(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
+
+$(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE): $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR)
+ifeq ($(MAKE_CURRENT_VERSION),yes)
+ $(ECHO_NOTHING)cd $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework; \
+ $(RM_LN_S) $(GNUSTEP_INSTANCE); \
+ $(LN_S) Versions/Current/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE) $(GNUSTEP_INSTANCE)$(END_ECHO)
+endif
+
+else
+
+# We create a top-level symlink (/copy)
+#
+# xxx.framework/{TARGET_LDIR}/xxx --> <the Current framework {TARGET_LDIR}/object file>
+#
+# And also
+#
+# xxx.framework/{TARGET_LDIR}/libxxx.so --> <the Current framework {TARGET_LDIR}/libxxx.so file>
+#
+# On Windows, we don't do any of this since there are no versions anyway.
+#
+# The reason for doing this is that you can link against the uninstalled framework
+# by just using -Lpath_to_the_framework/xxx.framework/$TARGET_LDIR
+#
+ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
+$(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR):
+ $(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
+
+$(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE): $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR)
+ifeq ($(MAKE_CURRENT_VERSION),yes)
+ $(ECHO_NOTHING)cd $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR); \
+ $(RM_LN_S) $(GNUSTEP_INSTANCE) $(FRAMEWORK_LIBRARY_FILE); \
+ $(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_TARGET_LDIR) \
+ Versions/Current/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE) short` \
+ $(GNUSTEP_INSTANCE); \
+ $(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_TARGET_LDIR) \
+ Versions/Current/$(GNUSTEP_TARGET_LDIR)/$(FRAMEWORK_LIBRARY_FILE) short` \
+ $(FRAMEWORK_LIBRARY_FILE)$(END_ECHO)
+endif
+endif
+endif
+
+ifneq ($(BUILD_DLL), yes)
+ LIB_LINK_FRAMEWORK_FILE = $(LIB_LINK_FILE)
+else
+ LIB_LINK_FRAMEWORK_FILE = $(LIB_LINK_DLL_FILE)
+endif
+
+LIB_LINK_FILES_TO_LINK = $(OBJ_FILES_TO_LINK)
+
+# Important: FRAMEWORK_FILE (which is created in the parallel
+# 'compile' invocation) depends on DUMMY_FRAMEWORK_OBJ_FILES as well,
+# which depends on a lot of other rules. These rules *must* be safe
+# for parallel building, because they will be used during a parallel
+# build. In particular, note that DUMMY_FRAMEWORK_OBJ_FILE must
+# itself depend on OBJ_FILES_TO_LINK else it might be built before all
+# files are compiled.
+$(FRAMEWORK_FILE): $(DUMMY_FRAMEWORK_OBJ_FILE) $(OBJ_FILES_TO_LINK)
+ifeq ($(OBJ_FILES_TO_LINK),)
+ $(WARNING_EMPTY_LINKING)
+endif
+ $(ECHO_LINKING) \
+ $(LIB_LINK_CMD) || $(RM) $(FRAMEWORK_FILE) ; \
+ (cd $(LIB_LINK_OBJ_DIR); \
+ $(RM_LN_S) $(GNUSTEP_INSTANCE); \
+ $(LN_S) $(LIB_LINK_FRAMEWORK_FILE) $(GNUSTEP_INSTANCE)) \
+ $(END_ECHO)
+
+ifeq ($(GNUSTEP_MAKE_PARALLEL_BUILDING), no)
+# Standard building
+internal-framework-run-compile-submake: $(FRAMEWORK_FILE)
+else
+# Parallel building. The actual compilation is delegated to a
+# sub-make invocation where _GNUSTEP_MAKE_PARALLEL is set to yet.
+# That sub-make invocation will compile files in parallel.
+internal-framework-run-compile-submake:
+ $(ECHO_NOTHING_RECURSIVE_MAKE)$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory --no-keep-going \
+ internal-framework-compile \
+ GNUSTEP_TYPE=$(GNUSTEP_TYPE) \
+ GNUSTEP_INSTANCE=$(GNUSTEP_INSTANCE) \
+ GNUSTEP_OPERATION=compile \
+ GNUSTEP_BUILD_DIR="$(GNUSTEP_BUILD_DIR)" \
+ _GNUSTEP_MAKE_PARALLEL=yes$(END_ECHO_RECURSIVE_MAKE)
+
+internal-framework-compile: $(FRAMEWORK_FILE)
+endif
+
+PRINCIPAL_CLASS = $(strip $($(GNUSTEP_INSTANCE)_PRINCIPAL_CLASS))
+
+ifeq ($(PRINCIPAL_CLASS),)
+ PRINCIPAL_CLASS = $(GNUSTEP_INSTANCE)
+endif
+
+MAIN_MODEL_FILE = $(strip $(subst .gmodel,,$(subst .gorm,,$(subst .nib,,$($(GNUSTEP_INSTANCE)_MAIN_MODEL_FILE)))))
+
+# FIXME: Use stamp.make to depend on the value of MAIN_MODEL_FILE and PRINCIPAL_CLASS
+
+# FIXME: MacOSX frameworks should also merge xxxInfo.plist into them
+# MacOSX-S frameworks
+$(FRAMEWORK_VERSION_DIR)/Resources/Info.plist:
+ $(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
+ echo " NSExecutable = \"$(GNUSTEP_INSTANCE)\";"; \
+ echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
+ echo " NSPrincipalClass = \"$(PRINCIPAL_CLASS)\";"; \
+ echo "}") >$@$(END_ECHO)
+
+# GNUstep frameworks
+$(FRAMEWORK_VERSION_DIR)/Resources/Info-gnustep.plist: \
+ $(DUMMY_FRAMEWORK_FILE) \
+ $(GNUSTEP_PLIST_DEPEND)
+ $(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
+ echo " NSExecutable = \"$(GNUSTEP_INSTANCE)$(FRAMEWORK_OBJ_EXT)\";"; \
+ echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
+ echo " NSPrincipalClass = \"$(PRINCIPAL_CLASS)\";"; \
+ echo " Classes = "; \
+ cat $(DUMMY_FRAMEWORK_CLASS_LIST); \
+ echo " ;"; \
+ echo "}") >$@$(END_ECHO)
+ $(ECHO_NOTHING)if [ -r "$(GNUSTEP_PLIST_DEPEND)" ]; then \
+ plmerge $@ $(GNUSTEP_PLIST_DEPEND); \
+ fi$(END_ECHO)
+
+ifneq ($(BUILD_DLL),yes)
+
+ifeq ($(FOUNDATION_LIB),gnu)
+
+internal-framework-install_:: $(FRAMEWORK_INSTALL_DIR) \
+ $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) \
+ $(GNUSTEP_HEADERS)
+ $(ECHO_INSTALLING)rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME); \
+ (cd $(GNUSTEP_BUILD_DIR); $(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(FRAMEWORK_DIR_NAME)) | (cd $(FRAMEWORK_INSTALL_DIR); $(TAR) xf -)$(END_ECHO)
+ifneq ($(CHOWN_TO),)
+ $(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME)$(END_ECHO)
+endif
+ifeq ($(strip),yes)
+ $(ECHO_STRIPPING)$(STRIP) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_FILE_NAME)$(END_ECHO)
+endif
+ $(ECHO_INSTALLING_HEADERS)cd $(GNUSTEP_HEADERS); \
+ $(RM_LN_S) $(HEADER_FILES_INSTALL_DIR); \
+ $(LN_S_RECURSIVE) `$(REL_PATH_SCRIPT) $(GNUSTEP_HEADERS) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME)/Headers short` $(HEADER_FILES_INSTALL_DIR); \
+ $(END_ECHO)
+ifneq ($(CHOWN_TO),)
+ $(ECHO_CHOWNING)cd $(GNUSTEP_HEADERS); \
+ $(CHOWN) $(CHOWN_TO) $(HEADER_FILES_INSTALL_DIR); \
+ $(END_ECHO)
+endif
+ $(ECHO_NOTHING)cd $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR); \
+ $(RM_LN_S) $(FRAMEWORK_LIBRARY_FILE); \
+ $(RM_LN_S) $(SONAME_FRAMEWORK_FILE); \
+ $(RM_LN_S) $(VERSION_FRAMEWORK_LIBRARY_FILE); \
+ $(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(FRAMEWORK_LIBRARY_FILE) short` $(FRAMEWORK_LIBRARY_FILE); \
+ if test -r "$(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(SONAME_FRAMEWORK_FILE)"; then \
+ $(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(SONAME_FRAMEWORK_FILE) short` $(SONAME_FRAMEWORK_FILE); \
+ fi; \
+ $(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(VERSION_FRAMEWORK_LIBRARY_FILE) short` $(VERSION_FRAMEWORK_LIBRARY_FILE)$(END_ECHO)
+ifneq ($(CHOWN_TO),)
+ $(ECHO_CHOWNING)cd $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR); \
+ $(CHOWN) $(CHOWN_TO) $(FRAMEWORK_LIBRARY_FILE); \
+ if test -r "$(SONAME_FRAMEWORK_FILE)"; then \
+ $(CHOWN) $(CHOWN_TO) $(SONAME_FRAMEWORK_FILE); \
+ fi; \
+ $(CHOWN) $(CHOWN_TO) $(VERSION_FRAMEWORK_LIBRARY_FILE)$(END_ECHO)
+endif
+
+else
+
+# This code for Apple OSX
+
+internal-framework-install_:: $(FRAMEWORK_INSTALL_DIR)
+ $(ECHO_INSTALLING)rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME); \
+ (cd $(GNUSTEP_BUILD_DIR); $(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(FRAMEWORK_DIR_NAME)) | (cd $(FRAMEWORK_INSTALL_DIR); $(TAR) xf -)$(END_ECHO)
+ifneq ($(CHOWN_TO),)
+ $(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME)$(END_ECHO)
+endif
+ifeq ($(strip),yes)
+ $(ECHO_STRIPPING)$(STRIP) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_FILE_NAME)$(END_ECHO)
+endif
+
+endif
+
+else # install DLL
+
+internal-framework-install_:: $(FRAMEWORK_INSTALL_DIR) \
+ $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) \
+ $(GNUSTEP_HEADERS) \
+ $(DLL_INSTALLATION_DIR)
+ $(ECHO_INSTALLING)\
+ rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME); \
+ (cd $(GNUSTEP_BUILD_DIR);\
+ $(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list \
+ $(FRAMEWORK_DIR_NAME)) | (cd $(FRAMEWORK_INSTALL_DIR); \
+ $(TAR) xf -)$(END_ECHO)
+ifneq ($(CHOWN_TO),)
+ $(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME)$(END_ECHO)
+endif
+ifeq ($(strip),yes)
+ $(ECHO_STRIPPING)$(STRIP) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_FILE_NAME)$(END_ECHO)
+endif
+ $(ECHO_INSTALLING_HEADERS)cd $(GNUSTEP_HEADERS); \
+ if test -d "$(HEADER_FILES_INSTALL_DIR)"; then \
+ rm -Rf $(HEADER_FILES_INSTALL_DIR); \
+ fi; \
+ $(MKINSTALLDIRS) $(HEADER_FILES_INSTALL_DIR); \
+ cd $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_VERSION_DIR_NAME)/Headers ; \
+ $(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list . | (cd $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR); \
+ $(TAR) xf - ); \
+ $(END_ECHO)
+ifneq ($(CHOWN_TO),)
+ $(ECHO_CHOWNING)cd $(GNUSTEP_HEADERS); \
+ $(CHOWN) -R $(CHOWN_TO) $(HEADER_FILES_INSTALL_DIR); \
+ $(END_ECHO)
+endif
+ $(ECHO_NOTHING)$(INSTALL_PROGRAM) $(FRAMEWORK_LIBRARY_DIR)/$(LIB_LINK_DLL_FILE) \
+ $(DLL_INSTALLATION_DIR)$(END_ECHO)
+ $(ECHO_NOTHING)$(INSTALL_PROGRAM) $(FRAMEWORK_FILE_NAME) \
+ $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR)$(END_ECHO)
+
+endif
+
+$(DLL_INSTALLATION_DIR):
+ $(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
+
+# If Version support is disabled, then this directory is the same as
+# the Resources directory in Shared/bundle.make for which we already
+# have a rule.
+ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
+$(FRAMEWORK_DIR)/Resources:
+ $(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
+endif
+
+$(FRAMEWORK_INSTALL_DIR):
+ $(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
+
+$(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR):
+ $(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
+
+$(GNUSTEP_HEADERS):
+ $(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
+
+ifneq ($(BUILD_DLL), yes)
+# NB: We use '$(RM_LN_S)' to remove the symlinks to insure
+# that we do not remove customized real directories.
+internal-framework-uninstall_::
+ $(ECHO_UNINSTALLING)if [ "$(HEADER_FILES)" != "" ]; then \
+ for file in $(HEADER_FILES) __done; do \
+ if [ $$file != __done ]; then \
+ rm -rf $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR)/$$file ; \
+ fi; \
+ done; \
+ fi; \
+ $(RM_LN_S) $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR) ; \
+ rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME) ; \
+ cd $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR); \
+ $(RM_LN_S) $(FRAMEWORK_LIBRARY_FILE); \
+ $(RM_LN_S) $(SONAME_FRAMEWORK_FILE); \
+ $(RM_LN_S) $(VERSION_FRAMEWORK_LIBRARY_FILE); \
+ $(END_ECHO)
+else
+internal-framework-uninstall_::
+ $(ECHO_UNINSTALLING)if [ "$(HEADER_FILES)" != "" ]; then \
+ for file in $(HEADER_FILES) __done; do \
+ if [ $$file != __done ]; then \
+ rm -rf $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR)/$$file ; \
+ fi; \
+ done; \
+ fi; \
+ $(RM_LN_S) $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR) ; \
+ rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME) ; \
+ cd $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR); \
+ $(RM_LN_S) $(FRAMEWORK_LIBRARY_FILE); \
+ cd $(DLL_INSTALLATION_DIR); \
+ $(RM_LN_S) $(LIB_LINK_DLL_FILE); \
+ $(END_ECHO)
+endif
+#
+# Cleaning targets
+#
+internal-framework-clean::
+ $(ECHO_NOTHING)rm -rf \
+ $(PSWRAP_C_FILES) $(PSWRAP_H_FILES) \
+ $(FRAMEWORK_DIR) $(DERIVED_SOURCES_DIR)$(END_ECHO)
+
+internal-framework-distclean::
+
+include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -0,0 +1,33 @@
--- SoObjects/SOGo/master-framework.make.orig 2015-09-23 03:38:31 UTC
+++ SoObjects/SOGo/master-framework.make
@@ -0,0 +1,30 @@
+#
+# framework.make
+#
+# Makefile rules to build GNUstep-based frameworks.
+#
+# Copyright (C) 2002 Free Software Foundation, Inc.
+#
+# Author: Nicola Pero <nicola@brainstorm.co.uk>
+#
+# This file is part of the GNUstep Makefile Package.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 3
+# of the License, or (at your option) any later version.
+#
+# You should have received a copy of the GNU General Public
+# License along with this library; see the file COPYING.
+# If not, write to the Free Software Foundation,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ifeq ($(GNUSTEP_INSTANCE),)
+include $(GNUSTEP_MAKEFILES)/Master/framework.make
+else
+
+ifeq ($(GNUSTEP_TYPE),framework)
+include instance-framework.make
+endif
+
+endif

View file

@ -0,0 +1,14 @@
--- Tests/Unit/GNUmakefile.orig 2015-09-16 18:41:31 UTC
+++ Tests/Unit/GNUmakefile
@@ -35,7 +35,10 @@ $(TEST_TOOL)_CPPFLAGS += \
-Wall -D_GNU_SOURCE -I../../SOPE/ -I../../SoObjects/ -I../../UI/
ADDITIONAL_LIB_DIRS += \
- -L../../SoObjects/SOGo/SOGo.framework/Versions/Current/sogo -L../../SOPE/NGCards/obj -L../../SOPE/GDLContentStore/obj -lSOGo -lNGMime -lNGCards -lGDLContentStore -lNGExtensions -lSBJson -lobjc \
+ -L../../SoObjects/SOGo/SOGo.framework/Versions/Current/sogo -L../../SOPE/NGCards/obj -L../../SOPE/GDLContentStore/obj \
+ -lSOGo -lNGMime -lNGCards -lGDLContentStore -lNGExtensions \
+ -lSBJson -lGDLAccess -lNGObjWeb -lNGStreams -lEOControl -lDOM \
+ -lNGLdap -lobjc \
-L/usr/local/lib -lSaxObjC \
-Wl,-rpath,../../SoObjects/SOGo/SOGo.framework/Versions/Current/sogo -Wl,-rpath,../../SOPE/NGCards/obj -Wl,-rpath,../../SOPE/GDLContentStore/obj
ADDITIONAL_LDFLAGS += -Wl,--no-as-needed

View file

@ -0,0 +1,9 @@
--- Tools/GNUmakefile.preamble.orig 2015-09-16 18:41:31 UTC
+++ Tools/GNUmakefile.preamble
@@ -13,4 +13,5 @@ ADDITIONAL_LIB_DIRS += \
-L../SoObjects/SOGo/SOGo.framework/sogo -lSOGo \
-L../SOPE/GDLContentStore/$(GNUSTEP_OBJ_DIR)/ -lGDLContentStore \
-L../SOPE/NGCards/$(GNUSTEP_OBJ_DIR)/ -lNGCards \
- -lEOControl -lNGStreams -lNGMime -lNGExtensions -lNGObjWeb
+ -lEOControl -lNGStreams -lNGMime -lNGExtensions -lNGObjWeb \
+ -lGDLAccess -lDOM -lSaxObjC -lNGLdap -lSBJson

28
www/sogo/files/sogod.in Normal file
View file

@ -0,0 +1,28 @@
#!/bin/sh
# $FreeBSD$
#
# PROVIDE: sogod
# REQUIRE: NETWORKING
# KEYWORD: shutdown
. /etc/rc.subr
name=sogod
rcvar=sogod_enable
load_rc_config ${name}
: ${sogod_enable:=NO}
command=%%GNUSTEP_LOCAL_TOOLS%%/Admin/${name}
pidfile=/var/run/sogo/sogo.pid
sogod_user=${name}
sogod_group=${name}
start_precmd="cd /; . %%GNUSTEP_MAKEFILES%%/GNUstep.sh; install -d -m 775 -g ${sogod_group} /var/log/sogo /var/run/sogo"
stop_precmd='cd /; . %%GNUSTEP_MAKEFILES%%/GNUstep.sh'
restart_precmd='cd /; . %%GNUSTEP_MAKEFILES%%/GNUstep.sh'
run_rc_command "$1"

6
www/sogo/pkg-descr Normal file
View file

@ -0,0 +1,6 @@
SOGo is a fully supported and trusted groupware server with a focus on
scalability and open standards. It provides a rich AJAX-based Web
interface and supports multiple native clients through the use of
standard protocols such as CalDAV, CardDAV and GroupDAV.
WWW: http://sogo.nu/

58
www/sogo/pkg-message Normal file
View file

@ -0,0 +1,58 @@
In order to run the sogo daemon (sogod), you will need to create and configure
the main configuration file, e.g.:
cp -p ${LOCALBASE}/etc/sogo/sogo.conf.sample ${LOCALBASE}/etc/sogo/sogo.conf
And to allow the service to run at system startup, add sogod_enable="YES"
in your rc.conf.
If you need to allow email alarms (notifications) for calendar events, copy
the sample credentials file:
cp -p ${LOCALBASE}/etc/sogo/ealarms-notify.creds.sample \
${LOCALBASE}/etc/sogo/ealarms-notify.creds
Then replace the username:password with appropriate credentials for SMTP AUTH
sending capabilities.
Then copy the sample cron executable:
cp -p ${LOCALBASE}/GNUstep/Local/Tools/Admin/cron-ealarms-notify.sample \
${LOCALBASE}/GNUstep/Local/Tools/Admin/cron-ealarms-notify
And edit this file to suit your server timezone (e.g. TZ=Africa/Algiers).
Then add the following lines to the root users' crontab (crontab -e):
# Process email reminders every minute
* * * * * ${LOCALBASE}/GNUstep/Local/Tools/Admin/cron-ealarms-notify
If you need to automatically purge vacation messages from users sieve scripts,
copy the sample credentials file:
cp -p ${LOCALBASE}/etc/sogo/expire-autoreply.creds.sample \
${LOCALBASE}/etc/sogo/expire-autoreply.creds
Then replace the username:password with appropriate credentials for your
IMAP servers' sieve account.
Then copy the sample cron executable:
cp -p ${LOCALBASE}/GNUstep/Local/Tools/Admin/cron-expire-autoreply.sample \
${LOCALBASE}/GNUstep/Local/Tools/Admin/cron-expire-autoreply
And edit this file to suit your server timezone (e.g. TZ=Africa/Algiers).
Then add the following lines to the root users' crontab (crontab -e):
# Vacation messages expiration
# The credentials file should contain the sieve admin credentials (username:passwd)
0 0 * * * ${LOCALBASE}/GNUstep/Local/Tools/Admin/cron-expire-autoreply
For more information about using SOGo, visit:
http://www.sogo.nu/downloads/documentation.html

1770
www/sogo/pkg-plist Normal file

File diff suppressed because it is too large Load diff