From 80a50e781978bb684ed60e66b9fbc1275ca600fb Mon Sep 17 00:00:00 2001 From: Vit Kabele Date: Sun, 23 Jul 2023 18:49:52 +0200 Subject: [PATCH 01/15] Add native/libtool (#5837) --- native/libtool/Makefile | 18 ++++++++++++++++++ native/libtool/digests | 3 +++ 2 files changed, 21 insertions(+) create mode 100644 native/libtool/Makefile create mode 100644 native/libtool/digests diff --git a/native/libtool/Makefile b/native/libtool/Makefile new file mode 100644 index 00000000000..9f6acc8f273 --- /dev/null +++ b/native/libtool/Makefile @@ -0,0 +1,18 @@ +PKG_NAME = libtool +PKG_VERS = 2.4.7 +PKG_EXT = tar.xz +PKG_DIST_NAME = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) +PKG_DIST_SITE = https://ftp.gnu.org/gnu/libtool +PKG_DIR = $(PKG_NAME)-$(PKG_VERS) + +DEPENDS = + +HOMEPAGE = https://www.gnu.org/software/libtool/ +COMMENT = GNU Libtool is a generic library support script that hides the complexity of using shared libraries behind a consistent, portable interface. +LICENSE = GPLv2 + +GNU_CONFIGURE = 1 +CONFIGURE_ARGS = --disable-static +ADDITIONAL_CFLAGS = -O + +include ../../mk/spksrc.native-cc.mk diff --git a/native/libtool/digests b/native/libtool/digests new file mode 100644 index 00000000000..e8cf9fb8a0b --- /dev/null +++ b/native/libtool/digests @@ -0,0 +1,3 @@ +libtool-2.4.7.tar.xz SHA1 0c90f1b046ea9cd7b32a4b5a6a9df4b46ddb637a +libtool-2.4.7.tar.xz SHA256 4f7f217f057ce655ff22559ad221a0fd8ef84ad1fc5fcb6990cecc333aa1635d +libtool-2.4.7.tar.xz MD5 2fc0b6ddcd66a89ed6e45db28fa44232 From 651fcbfc41aea6177e0e2de8ea8f8208bae9487c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Thu, 13 Jul 2023 14:29:56 +0200 Subject: [PATCH 02/15] Add cross/firebird (#5837) Build FirebirdSQL database The build works for x64, armv7 and aarch64 architectures with DSM 7.0 and 7.1 - Use configure --with-cross-build as used by firebird build itself --- cross/firebird/Makefile | 121 ++++ cross/firebird/PLIST | 50 ++ cross/firebird/digests | 3 + ...01-install-gbak-files-and-build_file.patch | 28 + .../src/cross_config/synology.aarch64.h | 666 +++++++++++++++++ .../src/cross_config/synology.armv7.h | 680 ++++++++++++++++++ .../firebird/src/cross_config/synology.x64.h | 666 +++++++++++++++++ cross/firebird/src/make.synology.aarch64 | 39 + cross/firebird/src/make.synology.armv7 | 40 ++ cross/firebird/src/make.synology.x64 | 41 ++ 10 files changed, 2334 insertions(+) create mode 100644 cross/firebird/Makefile create mode 100644 cross/firebird/PLIST create mode 100644 cross/firebird/digests create mode 100644 cross/firebird/patches/0001-install-gbak-files-and-build_file.patch create mode 100644 cross/firebird/src/cross_config/synology.aarch64.h create mode 100644 cross/firebird/src/cross_config/synology.armv7.h create mode 100644 cross/firebird/src/cross_config/synology.x64.h create mode 100644 cross/firebird/src/make.synology.aarch64 create mode 100644 cross/firebird/src/make.synology.armv7 create mode 100644 cross/firebird/src/make.synology.x64 diff --git a/cross/firebird/Makefile b/cross/firebird/Makefile new file mode 100644 index 00000000000..9934a46f80a --- /dev/null +++ b/cross/firebird/Makefile @@ -0,0 +1,121 @@ +PKG_NAME = firebird +PKG_VERS = 4.0.3 +PKG_EXT = tar.gz +PKG_DIST_NAME = v$(PKG_VERS).$(PKG_EXT) +PKG_DIST_SITE = https://github.com/FirebirdSQL/firebird/archive/refs/tags +PKG_DIR = $(PKG_NAME)-$(PKG_VERS) + +DEPENDS = cross/zlib cross/libicu native/libicu native/libtool + +UNSUPPORTED_ARCHS = $(ARMv5_ARCHS) $(OLD_PPC_ARCHS) + +# Create proper src/make.synology.evansport to support this +UNSUPPORTED_ARCHS += $(i686_ARCHS) + +# Uses too old GCC 4.9 +UNSUPPORTED_ARCHS += comcerto2k + +include ../../mk/spksrc.common.mk + +# Currently v4.0.2 works only with 7.0 and 7.1 +# DSM 7.2 has issues with GLIBC version +# DSM 6.x has issues with some C++ libraries versions +ifeq ($(call version_lt,$(TCVERSION),7.0)$(call version_gt,$(TCVERSION),7.1),1) +UNSUPPORTED_ARCHS += $(ARCH) +endif + +HOMEPAGE = https://www.firebirdsql.org/ +COMMENT = Firebird is a relational database offering many ANSI SQL standard features that runs on Linux, Windows, MacOS and a variety of Unix platforms. +LICENSE = MPL +MAINTAINER = vitkabele + +PRE_CONFIGURE_TARGET = firebird_pre_configure + +CONFIGURE_TARGET = firebird_configure + +COMPILE_TARGET = firebird_compile + +INSTALL_TARGET = firebird_install + +# CXXFLAGS should be set fine by the spksrc for cross-compilation, we will +# use it in cross2 step CROSS_ENV +ADDITIONAL_CXXFLAGS = -Wno-invalid-offsetof + +# Path to the libtool installed in the cross/libtool DEPENDS target +# We need the native libtool for building libommath/libtomcrypt in cross1 step +LIBTOOL_BIN = $(WORK_DIR)/../../../native/libtool/work-native/install/usr/local/bin/libtool + +# We need both native and cross compilers for building the binary. +include ../../mk/spksrc.cross-cc.mk + +# If we use --with-builtin-tomcrypt/math, the libraries are built during cross1 +# phase without -fPIC and then refuse to link during cross2 phase. Further, +# they can be built for different platforms during cross1 and cross2 phase. +# +# termlib and editline are disabled because we don't provide ncurses +# and editline libraries +CONFIGURE_ARGS = --without-termlib --with-builtin-tommath --with-builtin-tomcrypt \ + --without-editline --with-cross-build=synology.$(ARCH) --prefix=$(INSTALL_PREFIX) + +NATIVE_LIBICU_DIR := $(WORK_DIR)/../../../native/libicu/work-native/install/usr/local + +# CFLAGS and CXXFLAGS for cross1 compile stage +NATIVE_CFLAGS := -I$(NATIVE_LIBICU_DIR)/include -L$(NATIVE_LIBICU_DIR)/lib + +# Preprocessor flags +NATIVE_CPPFLAGS := -I$(NATIVE_LIBICU_DIR)/include + +# This ENV is for cross1 phase where we build native target +# +# The NATIVE flags must be passed to the configure part, because the configure +# fails when it cant find the headers. +NATIVE_ENV = CC=gcc CXX=g++ AS=as AR=ar LD=ld NM=nm OBJCOPY=objcopy OBJDUMP=objdump \ + PARALLEL_MAKE=max \ + LIBTOOL="$(LIBTOOL_BIN)" \ + CFLAGS="$(NATIVE_CFLAGS)" \ + CXXFLAGS="$(NATIVE_CFLAGS)" \ + CPPFLAGS="$(NATIVE_CPPFLAGS)" + +NATIVE_RUN = cd $(WORK_DIR)/$(PKG_DIR) && env $(NATIVE_ENV) + +# DO NOT MODIFY $(ENV) variable (too much) a.k.a. only add variables for ourselves +# and do not modify any CFLAGS or other universally recognized variable +# It breaks compilation of dependent cross/* libraries (especially cross/libicu) +# +# This ENV is for cross2 build phase where we build binaries for target platform +# CROSS_ prefixed vars are for the cross2 phase and we "strip" the CROSS_ prefix +# in our provided src/makefile.xxx +# +# The C(XX)FLAGS variables are ready by the spksrc for cross compilation, we +# just use them +ENV += CROSS_TOOLCHAIN=$(TC_PATH)$(TC_PREFIX) + +.PHONY: firebird_pre_configure +firebird_pre_configure: + cp src/make.synology.* $(WORK_DIR)/$(PKG_DIR)/builds/posix/ + cp src/cross_config/* $(WORK_DIR)/$(PKG_DIR)/src/include/cross/ + $(NATIVE_RUN) NOCONFIGURE=1 ./autogen.sh + +# Override the configure target, because we must pass it different env than +# ENV. We cannot modify ENV to contain -I for native/libicu, because it breaks +# compilation of native/libicu, but we must have this -I in the configure +# CFLAGS, otherwise the configure step fails with unicode headers not found. +.PHONY: firebird_configure +firebird_configure: + $(NATIVE_RUN) ./configure $(CONFIGURE_ARGS) + +# Firebird itself would be compiled by simple make, but we must pass different +# environment to cross1 and cross2 step. The toolchain and CFLAGS differ +.PHONY: firebird_compile +firebird_compile: + $(NATIVE_RUN) make TARGET=Native cross1 + $(RUN) make TARGET=Release CROSS_OUT=Y cross2 + +.PHONY: firebird_install +firebird_install: + $(RUN) make TARGET=Release CROSS_OUT=Y dist + # We assume there is just one buildroot.tar.gz file in the build tree + # This is a little hack since we don't know the exact path where it is + # produced and it is easier than patching the firebird Makefiles + cd $(WORK_DIR)/install && tar xf $$(find ../ -name buildroot.tar.gz) + diff --git a/cross/firebird/PLIST b/cross/firebird/PLIST new file mode 100644 index 00000000000..23b6be0838a --- /dev/null +++ b/cross/firebird/PLIST @@ -0,0 +1,50 @@ +rsc:CHANGELOG.md +rsc:IDPLicense.txt +rsc:IPLicense.txt +rsc:README.md +rsc:bin/changeServerMode.sh +rsc:bin/fb_config +bin:bin/build_file +bin:bin/fb_lock_print +bin:bin/fbguard +bin:bin/fbsvcmgr +bin:bin/fbtracemgr +bin:bin/firebird +bin:bin/gbak +bin:bin/gfix +bin:bin/gpre +bin:bin/gsec +bin:bin/gsplit +bin:bin/gstat +bin:bin/isql +bin:bin/nbackup +bin:bin/qli +rsc:bin/registerDatabase.sh +rsc:databases.conf +rsc:fbtrace.conf +rsc:firebird.conf +rsc:security4.gbak +rsc:msg.gbak +rsc:help/help.gbak +rsc:intl/fbintl +rsc:intl/fbintl.conf +lnk:lib/libfbclient.so +lnk:lib/libfbclient.so.2 +lib:lib/libfbclient.so.4.0.3 +lib:lib/libib_util.so +rsc:misc/intl.sql +rsc:misc/rc.config.firebird +rsc:misc/upgrade/udf/udf_replace.sql +rsc:misc/upgrade/udf/udf_replace.txt +rsc:plugins.conf +lib:plugins/libChaCha.so +lib:plugins/libEngine13.so +lib:plugins/libLegacy_Auth.so +lib:plugins/libLegacy_UserManager.so +lib:plugins/libSrp.so +lib:plugins/libfbtrace.so +lib:plugins/libudr_engine.so +lib:plugins/udr/libudf_compat.so +rsc:plugins/udr/udf_compat.sql +rsc:plugins/udr_engine.conf +rsc:replication.conf diff --git a/cross/firebird/digests b/cross/firebird/digests new file mode 100644 index 00000000000..7133bd6da93 --- /dev/null +++ b/cross/firebird/digests @@ -0,0 +1,3 @@ +v4.0.3.tar.gz SHA1 02dd8914e80acef2a662eab42b7ee5a3dc41248e +v4.0.3.tar.gz SHA256 90b799043c83325479989b1f44116d1f0112f77c5def4bb452470bf7a0dcc138 +v4.0.3.tar.gz MD5 1d57b5ee362be4c0b2c3f28e78f69aaf diff --git a/cross/firebird/patches/0001-install-gbak-files-and-build_file.patch b/cross/firebird/patches/0001-install-gbak-files-and-build_file.patch new file mode 100644 index 00000000000..f9c2d297182 --- /dev/null +++ b/cross/firebird/patches/0001-install-gbak-files-and-build_file.patch @@ -0,0 +1,28 @@ +diff -u builds/install/arch-specific/linux/makeInstallImage.sh.in builds/install/arch-specific/linux/makeInstallImage.sh.in +--- builds/install/arch-specific/linux/makeInstallImage.sh.in 2023-08-11 11:55:02.848124743 +0200 ++++ builds/install/arch-specific/linux/makeInstallImage.sh.in 2023-08-11 13:44:38.846348466 +0200 +@@ -34,7 +34,7 @@ + BuildRootDir=.. + BuiltFBDir=Release/firebird # Where the just build fb exists. + TargetDir=buildroot # Where we want to build the install image +-SecurityDatabase=security4.fdb ++SecurityDatabase=security4.gbak + TomMathBuild="@TOMMATH_BUILD@" + TomCryptBuild="@TOMCRYPT_BUILD@" + +@@ -183,6 +183,7 @@ + copyIfExists $BuiltFBDir/bin/fbtracemgr ${TargetDir}@FB_BINDIR@ + cp $BuiltFBDir/bin/isql ${TargetDir}@FB_BINDIR@/isql + cp $BuiltFBDir/bin/qli ${TargetDir}@FB_BINDIR@/qli ++ cp $BuiltFBDir/bin/build_file ${TargetDir}@FB_BINDIR@/build_file + + chmod 0755 ${TargetDir}@FB_BINDIR@/* + +@@ -239,6 +240,7 @@ + + #secureDB (access rights will be set at install time) + cp $BuiltFBDir/$SecurityDatabase ${TargetDir}@FB_SECDBDIR@ ++ cp $BuiltFBDir/msg.gbak ${TargetDir}@FB_SECDBDIR@ + + #include (.h .pas files) + cp $BuiltFBDir/include/*.h ${TargetDir}@FB_INCDIR@ diff --git a/cross/firebird/src/cross_config/synology.aarch64.h b/cross/firebird/src/cross_config/synology.aarch64.h new file mode 100644 index 00000000000..d8bd0907820 --- /dev/null +++ b/cross/firebird/src/cross_config/synology.aarch64.h @@ -0,0 +1,666 @@ +/* + * Copied from src/include/cross/android.arm64 and manually modified + */ + +/* log file name within log dir (firebird.log) */ +#define FB_LOGFILENAME "firebird.log" + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define this if CPU is amd64 */ +/* #undef AMD64 */ + +/* Include pthread support for binary relocation? */ +/* #undef BR_PTHREAD */ + +/* Define this if paths are case sensitive */ +#define CASE_SENSITIVITY false + +/* Define this if OS is DARWIN */ +/* #undef DARWIN */ + +/* Use binary relocation? */ +#define ENABLE_BINRELOC + +/* Alignment of long */ +#define FB_ALIGNMENT 8 + +/* executables DIR (PREFIX/bin) */ +#define FB_BINDIR "" + +/* config files DIR (PREFIX) */ +#define FB_CONFDIR "" + +/* documentation root DIR (PREFIX/doc) */ +#define FB_DOCDIR "" + +/* Alignment of double */ +#define FB_DOUBLE_ALIGN 8 + +/* guardian lock DIR (PREFIX) */ +#define FB_GUARDDIR "" + +/* QLI help DIR (PREFIX/help) */ +#define FB_HELPDIR "" + +/* C/C++ header files DIR (PREFIX/include) */ +#define FB_INCDIR "" + +/* international DIR (PREFIX/intl) */ +#define FB_INTLDIR "" + +/* Local IPC name */ +#define FB_IPC_NAME "FirebirdIPI" + +/* object code libraries DIR (PREFIX/lib) */ +#define FB_LIBDIR "" + +/* log files DIR (PREFIX) */ +#define FB_LOGDIR "" + +/* misc DIR (PREFIX/misc) */ +#define FB_MISCDIR "" + +/* message files DIR (PREFIX) */ +#define FB_MSGDIR "" + +/* Wnet pipe name */ +#define FB_PIPE_NAME "interbas" + +/* plugins DIR (PREFIX) */ +#define FB_PLUGDIR "" + +/* tzdata DIR (PREFIX) */ +#define FB_TZDATADIR "" + +/* Installation path prefix */ +#define FB_PREFIX "/usr/local/firebird" + +/* examples database DIR (PREFIX/examples/empbuild) */ +#define FB_SAMPLEDBDIR "" + +/* examples DIR (PREFIX/examples) */ +#define FB_SAMPLEDIR "" + +/* system admin executables DIR (PREFIX/bin) */ +#define FB_SBINDIR "" + +/* security database DIR (PREFIX) */ +#define FB_SECDBDIR "" + +/* Inet service name */ +#define FB_SERVICE_NAME "gds_db" + +/* Inet service port */ +#define FB_SERVICE_PORT 3050 + +/* Define this if OS is FreeBSD */ +/* #undef FREEBSD */ + +/* Define this if getmntent needs second argument */ +/* #undef GETMNTENT_TAKES_TWO_ARGUMENTS */ + +/* Define to 1 if the `getpgrp' function requires zero arguments. */ +#define GETPGRP_VOID 1 + +/* Define this if gettimeofday accepts second (timezone) argument */ +#define GETTIMEOFDAY_RETURNS_TIMEZONE 1 + +/* Define this if GPRE should support ADA */ +/* #undef GPRE_ADA */ + +/* Define this if GPRE should support COBOL */ +/* #undef GPRE_COBOL */ + +/* Define this if GPRE should support FORTRAN */ +/* #undef GPRE_FORTRAN */ + +/* Define this if GPRE should support PASCAL */ +/* #undef GPRE_PASCAL */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AIO_H */ + +/* Define this if AO_compare_and_swap_full() is defined in atomic_ops.h */ +/* #undef HAVE_AO_COMPARE_AND_SWAP_FULL */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ASSERT_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ATOMIC_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ATOMIC_OPS_H */ + +/* Define to 1 if the system has the type `caddr_t'. */ +/* #undef HAVE_CADDR_T */ + +/* Define to 1 if you have the header file. */ +#define HAVE_CRYPT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_CTYPE_H 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#define HAVE_DIRENT_H 1 + +/* Define to 1 if you have the `dirname' function. */ +#define HAVE_DIRNAME 1 + +/* Define to 1 if you have the `dladdr' function. */ +/* #define HAVE_DLADDR 1 */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define this if editline is in use */ +/* #undef HAVE_EDITLINE_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ERRNO_H 1 + +/* Define to 1 if you have the `fchmod' function. */ +#define HAVE_FCHMOD 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `fdatasync' function. */ +#define HAVE_FDATASYNC 1 + +/* Define to 1 if you have the `fegetenv' function. */ +#define HAVE_FEGETENV 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FLOAT_H 1 + +/* Define to 1 if you have the `flock' function. */ +#define HAVE_FLOCK 1 + +/* Define to 1 if you have the `fork' function. */ +#define HAVE_FORK 1 + +/* Define to 1 if you have the `fsync' function. */ +#define HAVE_FSYNC 1 + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* Define to 1 if you have the `getmntent' function. */ +#define HAVE_GETMNTENT 1 + +/* Define to 1 if you have the `getpagesize' function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define to 1 if you have the `getrlimit' function. */ +#define HAVE_GETRLIMIT 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the `getwd' function. */ +#define HAVE_GETWD 1 + +/* Define to 1 if you have the `gmtime_r' function. */ +#define HAVE_GMTIME_R 1 + +/* Define to 1 if you have the `ctime_r' function. */ +#define HAVE_CTIME_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_GRP_H 1 + +/* Define this if INFINITY is defined in math.h */ +#define HAVE_INFINITY 1 + +/* Define to 1 if you have the `initgroups' function. */ +#define HAVE_INITGROUPS 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `atomic_ops' library (-latomic_ops). */ +/* #undef HAVE_LIBATOMIC_OPS */ + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the `pthread' library (-lpthread). */ +/* #undef HAVE_LIBPTHREAD */ + +/* Define to 1 if you have the `sfio' library (-lsfio). */ +/* #undef HAVE_LIBSFIO */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the `llrint' function. */ +#define HAVE_LLRINT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define to 1 if you have the `localtime_r' function. */ +#define HAVE_LOCALTIME_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MATH_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mkstemp' function. */ +#define HAVE_MKSTEMP 1 + +/* Define to 1 if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MNTENT_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MNTTAB_H */ + +/* Define this if multi-threading should be supported */ +#define HAVE_MULTI_THREAD 1 + +/* Define to 1 if you have the `nanosleep' function. */ +#define HAVE_NANOSLEEP 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. */ +/* #undef HAVE_NDIR_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NETCONFIG_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the `poll' function. */ +#define HAVE_POLL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_POLL_H 1 + +/* Define this if posix_fadvise() is present on the platform */ +/* #undef HAVE_POSIX_FADVISE */ + +/* Define to 1 if you have the `pread' function. */ +#define HAVE_PREAD 1 + +/* Define if you have POSIX threads libraries and header files. */ +/* #undef HAVE_PTHREAD */ + +/* Define to 1 if you have the header file. */ +#define HAVE_PTHREAD_H 1 + +/* Define to 1 if you have the `pthread_keycreate' function. */ +/* #undef HAVE_PTHREAD_KEYCREATE */ + +/* Define to 1 if you have the `pthread_key_create' function. */ +#define HAVE_PTHREAD_KEY_CREATE 1 + +/* Define to 1 if you have the `pthread_mutexattr_setprotocol' function. */ +/* undef HAVE_PTHREAD_MUTEXATTR_SETPROTOCOL */ + +/* Define to 1 if you have the `pthread_mutexattr_setrobust_np' function. */ +/* #undef HAVE_PTHREAD_MUTEXATTR_SETROBUST_NP */ + +/* Define to 1 if you have the `pthread_mutex_consistent_np' function. */ +/* #undef HAVE_PTHREAD_MUTEX_CONSISTENT_NP */ + +/* Define to 1 if you have the `pthread_rwlockattr_setkind_np' function. */ +/* #undef HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP */ + +/* Define to 1 if you have the header file. */ +#define HAVE_PWD_H 1 + +/* Define to 1 if you have the `pwrite' function. */ +#define HAVE_PWRITE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_RPC_RPC_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_RPC_XDR_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SEMAPHORE_H 1 + +/* Define to 1 if you have the `semtimedop' function. */ +#define HAVE_SEMTIMEDOP 1 + +/* Define to 1 if the system has the type `semun'. */ +/* #undef HAVE_SEMUN */ + +/* Define to 1 if you have the `sem_init' function. */ +#define HAVE_SEM_INIT 1 + +/* Define to 1 if you have the `sem_timedwait' function. */ +#define HAVE_SEM_TIMEDWAIT 1 + +/* Define to 1 if you have the `setitimer' function. */ +#define HAVE_SETITIMER 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SETJMP_H 1 + +/* Define to 1 if you have the `setmntent' function. */ +#define HAVE_SETMNTENT 1 + +/* Define to 1 if you have the `setpgid' function. */ +#define HAVE_SETPGID 1 + +/* Define to 1 if you have the `setrlimit' function. */ +#define HAVE_SETRLIMIT 1 + +/* Define to 1 if you have the `sigaction' function. */ +#define HAVE_SIGACTION 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SIGNAL_H 1 + +/* Define to 1 if you have the `sigset' function. */ +/* #undef HAVE_SIGSET */ + +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SOCKET_H */ + +/* Define to 1 if the system has the type `socklen_t'. */ +#define HAVE_SOCKLEN_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDARG_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strcasecmp' function. */ +#define HAVE_STRCASECMP 1 + +/* Define to 1 if you have the `strdup' function. */ +#define HAVE_STRDUP 1 + +/* Define to 1 if you have the `strerror_r' function. */ +#define HAVE_STRERROR_R 1 + +/* Define to 1 if you have the `stricmp' function. */ +/* #undef HAVE_STRICMP */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strncasecmp' function. */ +#define HAVE_STRNCASECMP 1 + +/* Define to 1 if you have the `strnicmp' function. */ +/* #undef HAVE_STRNICMP */ + +/* Define this if struct dirent has d_type */ +#define HAVE_STRUCT_DIRENT_D_TYPE 1 + +/* Define to 1 if the system has the type `struct xdr_ops'. */ +#define HAVE_STRUCT_XDR_OPS 1 + +/* Define to 1 if the system has the type `struct XDR::xdr_ops'. */ +/* #undef HAVE_STRUCT_XDR__XDR_OPS */ + +/* Define to 1 if you have the `swab' function. */ +#define HAVE_SWAB 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_DIR_H */ + +/* + * For SYS_gettid + * Define to 1 if you have the header file + * MANUALLY ADDED + */ +#define HAVE_SYS_SYSCALL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_FILE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IPC_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_MNTENT_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_MNTTAB_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_MOUNT_H 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_RESOURCE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SEM_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SIGINFO_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SIGNAL_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SOCKIO_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +/* Deprecated in android-24 */ +#undef HAVE_SYS_TIMEB_H + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_UIO_H 1 + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the `tcgetattr' function. */ +#define HAVE_TCGETATTR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TERMIO_H 1 + +/* Define to 1 if you have the `time' function. */ +#define HAVE_TIME 1 + +/* Define to 1 if you have the `times' function. */ +#define HAVE_TIMES 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_UTIME_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_VARARGS_H */ + +/* Define this if va_copy() is defined in stdarg.h */ +#define HAVE_VA_COPY 1 + +/* Define to 1 if you have the `vfork' function. */ +#define HAVE_VFORK 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_VFORK_H */ + +/* Define to 1 if you have the `vsnprintf' function. */ +#define HAVE_VSNPRINTF 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define to 1 if `fork' works. */ +#define HAVE_WORKING_FORK 1 + +/* Define to 1 if `vfork' works. */ +#define HAVE_WORKING_VFORK 1 + +/* Define to 1 if you have the file `AC_File'. */ +#define HAVE__PROC_SELF_EXE 1 + +/* Define to 1 if you have the `_swab' function. */ +/* #undef HAVE__SWAB */ + +/* Define it if compiler supports ISO syntax for thread-local storage */ +#define HAVE___THREAD 1 + +/* Define this if CPU is HPPA */ +/* #undef HPPA */ + +/* Define this if OS is HP-UX */ +/* #undef HPUX */ + +/* Define this if OS is Linux */ +#define LINUX 1 + +/* Define this if OS is NetBSD */ +/* #undef NETBSD */ + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "" + +/* Define to the necessary symbol if this constant uses a non-standard name on + your system. */ +/* #undef PTHREAD_CREATE_JOINABLE */ + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE void + +/* Define to 1 if the `setpgrp' function takes no argument. */ +#define SETPGRP_VOID 1 + +/* Architecture is big-edian sh4 */ +/* #undef SHEB */ + +/* Extension for shared libraries */ +#define SHRLIB_EXT "so" + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG 8 + +/* The size of `size_t', as computed by sizeof. */ +#define SIZEOF_SIZE_T 8 + +/* The size of `void *', as computed by sizeof. */ +#define SIZEOF_VOID_P 8 + + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define this if databases on raw devices should be supported */ +#define SUPPORT_RAW_DEVICES 1 + +/* Define to 1 if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* Define this if OS is Windows NT */ +/* #undef WIN_NT */ + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Define this if sem_init() works on the platform */ +#define WORKING_SEM_INIT 1 + +/* Number of bits in a file offset, on hosts where this is settable. */ +#define _FILE_OFFSET_BITS 64 + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* Define to `long int' if does not define. */ +/* #undef off_t */ + +/* Define to `int' if does not define. */ +/* #undef pid_t */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + +/* Define to `int' if doesn't define. */ +/* #undef uid_t */ + +/* Define as `fork' if `vfork' does not work. */ +/* #undef vfork */ + +/* Define to empty if the keyword `volatile' does not work. Warning: valid + code using `volatile' can become incorrect without. Disable with care. */ +/* #undef volatile */ + +#ifdef GETTIMEOFDAY_RETURNS_TIMEZONE +#define GETTIMEOFDAY(x) gettimeofday((x), (struct timezone *)0) +#else +#define GETTIMEOFDAY(x) gettimeofday((x)) +#endif + +#ifndef HAVE_SOCKLEN_T +typedef int socklen_t; +#endif diff --git a/cross/firebird/src/cross_config/synology.armv7.h b/cross/firebird/src/cross_config/synology.armv7.h new file mode 100644 index 00000000000..65187573ce9 --- /dev/null +++ b/cross/firebird/src/cross_config/synology.armv7.h @@ -0,0 +1,680 @@ +/* + * Copied from src/include/cross/android.arme and manually modified + */ + +/* log file name within log dir (firebird.log) */ +#define FB_LOGFILENAME "firebird.log" + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define this if OS is AIX */ +/* #undef AIX */ + +/* Define this if CPU is Alpha */ +/* #undef ALPHA */ + +/* Define this if CPU is amd64 */ +/* #undef AMD64 */ + +/* Include pthread support for binary relocation? */ +/* #undef BR_PTHREAD */ + +/* Define this if paths are case sensitive */ +#define CASE_SENSITIVITY false + +/* Define this if OS is DARWIN */ +/* #undef DARWIN */ + +/* Use binary relocation? */ +#define ENABLE_BINRELOC + +/* Alignment of long */ +#define FB_ALIGNMENT 8 + +/* executables DIR (PREFIX/bin) */ +#define FB_BINDIR "" + +/* config files DIR (PREFIX) */ +#define FB_CONFDIR "" + +/* documentation root DIR (PREFIX/doc) */ +#define FB_DOCDIR "" + +/* Alignment of double */ +#define FB_DOUBLE_ALIGN 8 + +/* guardian lock DIR (PREFIX) */ +#define FB_GUARDDIR "" + +/* QLI help DIR (PREFIX/help) */ +#define FB_HELPDIR "" + +/* C/C++ header files DIR (PREFIX/include) */ +#define FB_INCDIR "" + +/* international DIR (PREFIX/intl) */ +#define FB_INTLDIR "" + +/* Local IPC name */ +#define FB_IPC_NAME "FirebirdIPI" + +/* object code libraries DIR (PREFIX/lib) */ +#define FB_LIBDIR "" + +/* log files DIR (PREFIX) */ +#define FB_LOGDIR "" + +/* misc DIR (PREFIX/misc) */ +#define FB_MISCDIR "" + +/* message files DIR (PREFIX) */ +#define FB_MSGDIR "" + +/* Wnet pipe name */ +#define FB_PIPE_NAME "interbas" + +/* plugins DIR (PREFIX) */ +#define FB_PLUGDIR "" + +/* tzdata DIR (PREFIX) */ +#define FB_TZDATADIR "" + +/* Installation path prefix */ +#define FB_PREFIX "/usr/local/firebird" + +/* examples database DIR (PREFIX/examples/empbuild) */ +#define FB_SAMPLEDBDIR "" + +/* examples DIR (PREFIX/examples) */ +#define FB_SAMPLEDIR "" + +/* system admin executables DIR (PREFIX/bin) */ +#define FB_SBINDIR "" + +/* security database DIR (PREFIX) */ +#define FB_SECDBDIR "" + +/* Inet service name */ +#define FB_SERVICE_NAME "gds_db" + +/* Inet service port */ +#define FB_SERVICE_PORT 3050 + +/* Define this if OS is FreeBSD */ +/* #undef FREEBSD */ + +/* Define this if getmntent needs second argument */ +/* #undef GETMNTENT_TAKES_TWO_ARGUMENTS */ + +/* Define to 1 if the `getpgrp' function requires zero arguments. */ +#define GETPGRP_VOID 1 + +/* Define this if gettimeofday accepts second (timezone) argument */ +#define GETTIMEOFDAY_RETURNS_TIMEZONE 1 + +/* Define this if GPRE should support ADA */ +/* #undef GPRE_ADA */ + +/* Define this if GPRE should support COBOL */ +/* #undef GPRE_COBOL */ + +/* Define this if GPRE should support FORTRAN */ +/* #undef GPRE_FORTRAN */ + +/* Define this if GPRE should support PASCAL */ +/* #undef GPRE_PASCAL */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AIO_H */ + +/* Define this if AO_compare_and_swap_full() is defined in atomic_ops.h */ +/* #undef HAVE_AO_COMPARE_AND_SWAP_FULL */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ASSERT_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ATOMIC_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ATOMIC_OPS_H */ + +/* Define to 1 if the system has the type `caddr_t'. */ +/* #undef HAVE_CADDR_T */ + +/* Define to 1 if you have the header file. */ +#define HAVE_CRYPT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_CTYPE_H 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#define HAVE_DIRENT_H 1 + +/* Define to 1 if you have the `dirname' function. */ +#define HAVE_DIRNAME 1 + +/* Define to 1 if you have the `dladdr' function. */ +/* #define HAVE_DLADDR 1 */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define this if editline is in use */ +/* #undef HAVE_EDITLINE_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ERRNO_H 1 + +/* Define to 1 if you have the `fchmod' function. */ +#define HAVE_FCHMOD 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `fdatasync' function. */ +#define HAVE_FDATASYNC 1 + +/* Define to 1 if you have the `fegetenv' function. */ +#define HAVE_FEGETENV 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FLOAT_H 1 + +/* Define to 1 if you have the `flock' function. */ +#define HAVE_FLOCK 1 + +/* Define to 1 if you have the `fork' function. */ +#define HAVE_FORK 1 + +/* Define to 1 if you have the `fsync' function. */ +#define HAVE_FSYNC 1 + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* Define to 1 if you have the `getmntent' function. */ +#define HAVE_GETMNTENT 1 + +/* Define to 1 if you have the `getpagesize' function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define to 1 if you have the `getrlimit' function. */ +#define HAVE_GETRLIMIT 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the `getwd' function. */ +#define HAVE_GETWD 1 + +/* Define to 1 if you have the `gmtime_r' function. */ +#define HAVE_GMTIME_R 1 + +/* Define to 1 if you have the `ctime_r' function. */ +#define HAVE_CTIME_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_GRP_H 1 + +/* Define this if INFINITY is defined in math.h */ +#define HAVE_INFINITY 1 + +/* Define to 1 if you have the `initgroups' function. */ +#define HAVE_INITGROUPS 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `atomic_ops' library (-latomic_ops). */ +/* #undef HAVE_LIBATOMIC_OPS */ + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the `pthread' library (-lpthread). */ +/* #undef HAVE_LIBPTHREAD */ + +/* Define to 1 if you have the `sfio' library (-lsfio). */ +/* #undef HAVE_LIBSFIO */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the `llrint' function. */ +#define HAVE_LLRINT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define to 1 if you have the `localtime_r' function. */ +#define HAVE_LOCALTIME_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MATH_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mkstemp' function. */ +#define HAVE_MKSTEMP 1 + +/* Define to 1 if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MNTENT_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MNTTAB_H */ + +/* Define this if multi-threading should be supported */ +#define HAVE_MULTI_THREAD 1 + +/* Define to 1 if you have the `nanosleep' function. */ +#define HAVE_NANOSLEEP 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. */ +/* #undef HAVE_NDIR_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NETCONFIG_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the `poll' function. */ +#define HAVE_POLL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_POLL_H 1 + +/* Define this if posix_fadvise() is present on the platform */ +/* #undef HAVE_POSIX_FADVISE */ + +/* Define to 1 if you have the `pread' function. */ +#define HAVE_PREAD 1 + +/* Define if you have POSIX threads libraries and header files. */ +/* #undef HAVE_PTHREAD */ + +/* Define to 1 if you have the header file. */ +#define HAVE_PTHREAD_H 1 + +/* Define to 1 if you have the `pthread_keycreate' function. */ +/* #undef HAVE_PTHREAD_KEYCREATE */ + +/* Define to 1 if you have the `pthread_key_create' function. */ +#define HAVE_PTHREAD_KEY_CREATE 1 + +/* Define to 1 if you have the `pthread_mutexattr_setprotocol' function. */ +/* undef HAVE_PTHREAD_MUTEXATTR_SETPROTOCOL */ + +/* Define to 1 if you have the `pthread_mutexattr_setrobust_np' function. */ +/* #undef HAVE_PTHREAD_MUTEXATTR_SETROBUST_NP */ + +/* Define to 1 if you have the `pthread_mutex_consistent_np' function. */ +/* #undef HAVE_PTHREAD_MUTEX_CONSISTENT_NP */ + +/* Define to 1 if you have the `pthread_rwlockattr_setkind_np' function. */ +/* #undef HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP */ + +/* Define to 1 if you have the header file. */ +#define HAVE_PWD_H 1 + +/* Define to 1 if you have the `pwrite' function. */ +#define HAVE_PWRITE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_RPC_RPC_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_RPC_XDR_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SEMAPHORE_H 1 + +/* Define to 1 if you have the `semtimedop' function. */ +#define HAVE_SEMTIMEDOP 1 + +/* Define to 1 if the system has the type `semun'. */ +/* #undef HAVE_SEMUN */ + +/* Define to 1 if you have the `sem_init' function. */ +#define HAVE_SEM_INIT 1 + +/* Define to 1 if you have the `sem_timedwait' function. */ +#define HAVE_SEM_TIMEDWAIT 1 + +/* Define to 1 if you have the `setitimer' function. */ +#define HAVE_SETITIMER 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SETJMP_H 1 + +/* Define to 1 if you have the `setmntent' function. */ +#define HAVE_SETMNTENT 1 + +/* Define to 1 if you have the `setpgid' function. */ +#define HAVE_SETPGID 1 + +/* Define to 1 if you have the `setrlimit' function. */ +#define HAVE_SETRLIMIT 1 + +/* Define to 1 if you have the `sigaction' function. */ +#define HAVE_SIGACTION 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SIGNAL_H 1 + +/* Define to 1 if you have the `sigset' function. */ +/* #undef HAVE_SIGSET */ + +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SOCKET_H */ + +/* Define to 1 if the system has the type `socklen_t'. */ +#define HAVE_SOCKLEN_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDARG_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strcasecmp' function. */ +#define HAVE_STRCASECMP 1 + +/* Define to 1 if you have the `strdup' function. */ +#define HAVE_STRDUP 1 + +/* Define to 1 if you have the `strerror_r' function. */ +#define HAVE_STRERROR_R 1 + +/* Define to 1 if you have the `stricmp' function. */ +/* #undef HAVE_STRICMP */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strncasecmp' function. */ +#define HAVE_STRNCASECMP 1 + +/* Define to 1 if you have the `strnicmp' function. */ +/* #undef HAVE_STRNICMP */ + +/* Define this if struct dirent has d_type */ +#define HAVE_STRUCT_DIRENT_D_TYPE 1 + +/* Define to 1 if the system has the type `struct xdr_ops'. */ +#define HAVE_STRUCT_XDR_OPS 1 + +/* Define to 1 if the system has the type `struct XDR::xdr_ops'. */ +/* #undef HAVE_STRUCT_XDR__XDR_OPS */ + +/* Define to 1 if you have the `swab' function. */ +#define HAVE_SWAB 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_DIR_H */ + +/* + * For SYS_gettid + * Define to 1 if you have the header file + * MANUALLY ADDED + */ +#define HAVE_SYS_SYSCALL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_FILE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IPC_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_MNTENT_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_MNTTAB_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_MOUNT_H 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_RESOURCE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SEM_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SIGINFO_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SIGNAL_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SOCKIO_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +/* Deprecated in android-24 */ +#undef HAVE_SYS_TIMEB_H + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_UIO_H 1 + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the `tcgetattr' function. */ +#define HAVE_TCGETATTR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TERMIO_H 1 + +/* Define to 1 if you have the `time' function. */ +#define HAVE_TIME 1 + +/* Define to 1 if you have the `times' function. */ +#define HAVE_TIMES 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_UTIME_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_VARARGS_H */ + +/* Define this if va_copy() is defined in stdarg.h */ +#define HAVE_VA_COPY 1 + +/* Define to 1 if you have the `vfork' function. */ +#define HAVE_VFORK 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_VFORK_H */ + +/* Define to 1 if you have the `vsnprintf' function. */ +#define HAVE_VSNPRINTF 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define to 1 if `fork' works. */ +#define HAVE_WORKING_FORK 1 + +/* Define to 1 if `vfork' works. */ +#define HAVE_WORKING_VFORK 1 + +/* Define to 1 if you have the file `AC_File'. */ +#define HAVE__PROC_SELF_EXE 1 + +/* Define to 1 if you have the `_swab' function. */ +/* #undef HAVE__SWAB */ + +/* Define it if compiler supports ISO syntax for thread-local storage */ +#define HAVE___THREAD 1 + +/* Define this if CPU is HPPA */ +/* #undef HPPA */ + +/* Define this if OS is HP-UX */ +/* #undef HPUX */ + +/* Define this if OS is Linux */ +#define LINUX 1 + +/* Define this if OS is NetBSD */ +/* #undef NETBSD */ + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "" + +/* Define to the necessary symbol if this constant uses a non-standard name on + your system. */ +/* #undef PTHREAD_CREATE_JOINABLE */ + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE void + +/* Define to 1 if the `setpgrp' function takes no argument. */ +#define SETPGRP_VOID 1 + +/* Architecture is little-endian sh4 */ +/* #undef SH */ + +/* Architecture is big-edian sh4 */ +/* #undef SHEB */ + +/* Extension for shared libraries */ +#define SHRLIB_EXT "so" + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG 4 + +/* The size of `size_t', as computed by sizeof. */ +#define SIZEOF_SIZE_T 4 + +/* The size of `void *', as computed by sizeof. */ +#define SIZEOF_VOID_P 4 + +/* Define this if OS is Solaris Sparc */ +/* #undef SOLARIS */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define this if databases on raw devices should be supported */ +#define SUPPORT_RAW_DEVICES 1 + +/* Define to 1 if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* Define this if OS is Windows NT */ +/* #undef WIN_NT */ + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Define this if sem_init() works on the platform */ +#define WORKING_SEM_INIT 1 + +/* Number of bits in a file offset, on hosts where this is settable. */ +#define _FILE_OFFSET_BITS 64 + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* Define to `long int' if does not define. */ +/* #undef off_t */ + +/* Define to `int' if does not define. */ +/* #undef pid_t */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + +/* Define this if OS is Solarix x86 */ +/* #undef solx86 */ + +/* Define to `int' if doesn't define. */ +/* #undef uid_t */ + +/* Define as `fork' if `vfork' does not work. */ +/* #undef vfork */ + +/* Define to empty if the keyword `volatile' does not work. Warning: valid + code using `volatile' can become incorrect without. Disable with care. */ +/* #undef volatile */ + +#ifdef GETTIMEOFDAY_RETURNS_TIMEZONE +#define GETTIMEOFDAY(x) gettimeofday((x), (struct timezone *)0) +#else +#define GETTIMEOFDAY(x) gettimeofday((x)) +#endif + +#ifndef HAVE_SOCKLEN_T +typedef int socklen_t; +#endif diff --git a/cross/firebird/src/cross_config/synology.x64.h b/cross/firebird/src/cross_config/synology.x64.h new file mode 100644 index 00000000000..4d730f3e141 --- /dev/null +++ b/cross/firebird/src/cross_config/synology.x64.h @@ -0,0 +1,666 @@ +/* + * Copied from src/include/cross/android.x86_64 and manually modified + */ + +/* log file name within log dir (firebird.log) */ +#define FB_LOGFILENAME "firebird.log" + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define this if CPU is amd64 */ +/* #undef AMD64 */ + +/* Include pthread support for binary relocation? */ +/* #undef BR_PTHREAD */ + +/* Define this if paths are case sensitive */ +#define CASE_SENSITIVITY false + +/* Define this if OS is DARWIN */ +/* #undef DARWIN */ + +/* Use binary relocation? */ +#define ENABLE_BINRELOC + +/* Alignment of long */ +#define FB_ALIGNMENT 8 + +/* executables DIR (PREFIX/bin) */ +#define FB_BINDIR "" + +/* config files DIR (PREFIX) */ +#define FB_CONFDIR "" + +/* documentation root DIR (PREFIX/doc) */ +#define FB_DOCDIR "" + +/* Alignment of double */ +#define FB_DOUBLE_ALIGN 8 + +/* guardian lock DIR (PREFIX) */ +#define FB_GUARDDIR "" + +/* QLI help DIR (PREFIX/help) */ +#define FB_HELPDIR "" + +/* C/C++ header files DIR (PREFIX/include) */ +#define FB_INCDIR "" + +/* international DIR (PREFIX/intl) */ +#define FB_INTLDIR "" + +/* Local IPC name */ +#define FB_IPC_NAME "FirebirdIPI" + +/* object code libraries DIR (PREFIX/lib) */ +#define FB_LIBDIR "" + +/* log files DIR (PREFIX) */ +#define FB_LOGDIR "" + +/* misc DIR (PREFIX/misc) */ +#define FB_MISCDIR "" + +/* message files DIR (PREFIX) */ +#define FB_MSGDIR "" + +/* Wnet pipe name */ +#define FB_PIPE_NAME "interbas" + +/* plugins DIR (PREFIX) */ +#define FB_PLUGDIR "" + +/* tzdata DIR (PREFIX) */ +#define FB_TZDATADIR "" + +/* Installation path prefix */ +#define FB_PREFIX "/usr/local/firebird" + +/* examples database DIR (PREFIX/examples/empbuild) */ +#define FB_SAMPLEDBDIR "" + +/* examples DIR (PREFIX/examples) */ +#define FB_SAMPLEDIR "" + +/* system admin executables DIR (PREFIX/bin) */ +#define FB_SBINDIR "" + +/* security database DIR (PREFIX) */ +#define FB_SECDBDIR "" + +/* Inet service name */ +#define FB_SERVICE_NAME "gds_db" + +/* Inet service port */ +#define FB_SERVICE_PORT 3050 + +/* Define this if OS is FreeBSD */ +/* #undef FREEBSD */ + +/* Define this if getmntent needs second argument */ +/* #undef GETMNTENT_TAKES_TWO_ARGUMENTS */ + +/* Define to 1 if the `getpgrp' function requires zero arguments. */ +#define GETPGRP_VOID 1 + +/* Define this if gettimeofday accepts second (timezone) argument */ +#define GETTIMEOFDAY_RETURNS_TIMEZONE 1 + +/* Define this if GPRE should support ADA */ +/* #undef GPRE_ADA */ + +/* Define this if GPRE should support COBOL */ +/* #undef GPRE_COBOL */ + +/* Define this if GPRE should support FORTRAN */ +/* #undef GPRE_FORTRAN */ + +/* Define this if GPRE should support PASCAL */ +/* #undef GPRE_PASCAL */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_AIO_H */ + +/* Define this if AO_compare_and_swap_full() is defined in atomic_ops.h */ +/* #undef HAVE_AO_COMPARE_AND_SWAP_FULL */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ASSERT_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ATOMIC_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ATOMIC_OPS_H */ + +/* Define to 1 if the system has the type `caddr_t'. */ +/* #undef HAVE_CADDR_T */ + +/* Define to 1 if you have the header file. */ +#define HAVE_CRYPT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_CTYPE_H 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#define HAVE_DIRENT_H 1 + +/* Define to 1 if you have the `dirname' function. */ +#define HAVE_DIRNAME 1 + +/* Define to 1 if you have the `dladdr' function. */ +/* #define HAVE_DLADDR 1 */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define this if editline is in use */ +/* #undef HAVE_EDITLINE_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ERRNO_H 1 + +/* Define to 1 if you have the `fchmod' function. */ +#define HAVE_FCHMOD 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `fdatasync' function. */ +#define HAVE_FDATASYNC 1 + +/* Define to 1 if you have the `fegetenv' function. */ +#define HAVE_FEGETENV 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FLOAT_H 1 + +/* Define to 1 if you have the `flock' function. */ +#define HAVE_FLOCK 1 + +/* Define to 1 if you have the `fork' function. */ +#define HAVE_FORK 1 + +/* Define to 1 if you have the `fsync' function. */ +#define HAVE_FSYNC 1 + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* Define to 1 if you have the `getmntent' function. */ +#define HAVE_GETMNTENT 1 + +/* Define to 1 if you have the `getpagesize' function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define to 1 if you have the `getrlimit' function. */ +#define HAVE_GETRLIMIT 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the `getwd' function. */ +#define HAVE_GETWD 1 + +/* Define to 1 if you have the `gmtime_r' function. */ +#define HAVE_GMTIME_R 1 + +/* Define to 1 if you have the `ctime_r' function. */ +#define HAVE_CTIME_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_GRP_H 1 + +/* Define this if INFINITY is defined in math.h */ +#define HAVE_INFINITY 1 + +/* Define to 1 if you have the `initgroups' function. */ +#define HAVE_INITGROUPS 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `atomic_ops' library (-latomic_ops). */ +/* #undef HAVE_LIBATOMIC_OPS */ + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the `pthread' library (-lpthread). */ +/* #undef HAVE_LIBPTHREAD */ + +/* Define to 1 if you have the `sfio' library (-lsfio). */ +/* #undef HAVE_LIBSFIO */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the `llrint' function. */ +#define HAVE_LLRINT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define to 1 if you have the `localtime_r' function. */ +#define HAVE_LOCALTIME_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MATH_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mkstemp' function. */ +#define HAVE_MKSTEMP 1 + +/* Define to 1 if you have a working `mmap' system call. */ +#define HAVE_MMAP 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MNTENT_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MNTTAB_H */ + +/* Define this if multi-threading should be supported */ +#define HAVE_MULTI_THREAD 1 + +/* Define to 1 if you have the `nanosleep' function. */ +#define HAVE_NANOSLEEP 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. */ +/* #undef HAVE_NDIR_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NETCONFIG_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the `poll' function. */ +#define HAVE_POLL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_POLL_H 1 + +/* Define this if posix_fadvise() is present on the platform */ +/* #undef HAVE_POSIX_FADVISE */ + +/* Define to 1 if you have the `pread' function. */ +#define HAVE_PREAD 1 + +/* Define if you have POSIX threads libraries and header files. */ +/* #undef HAVE_PTHREAD */ + +/* Define to 1 if you have the header file. */ +#define HAVE_PTHREAD_H 1 + +/* Define to 1 if you have the `pthread_keycreate' function. */ +/* #undef HAVE_PTHREAD_KEYCREATE */ + +/* Define to 1 if you have the `pthread_key_create' function. */ +#define HAVE_PTHREAD_KEY_CREATE 1 + +/* Define to 1 if you have the `pthread_mutexattr_setprotocol' function. */ +/* undef HAVE_PTHREAD_MUTEXATTR_SETPROTOCOL */ + +/* Define to 1 if you have the `pthread_mutexattr_setrobust_np' function. */ +/* #undef HAVE_PTHREAD_MUTEXATTR_SETROBUST_NP */ + +/* Define to 1 if you have the `pthread_mutex_consistent_np' function. */ +/* #undef HAVE_PTHREAD_MUTEX_CONSISTENT_NP */ + +/* Define to 1 if you have the `pthread_rwlockattr_setkind_np' function. */ +/* #undef HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP */ + +/* Define to 1 if you have the header file. */ +#define HAVE_PWD_H 1 + +/* Define to 1 if you have the `pwrite' function. */ +#define HAVE_PWRITE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_RPC_RPC_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_RPC_XDR_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SEMAPHORE_H 1 + +/* Define to 1 if you have the `semtimedop' function. */ +#define HAVE_SEMTIMEDOP 1 + +/* Define to 1 if the system has the type `semun'. */ +/* #undef HAVE_SEMUN */ + +/* Define to 1 if you have the `sem_init' function. */ +#define HAVE_SEM_INIT 1 + +/* Define to 1 if you have the `sem_timedwait' function. */ +#define HAVE_SEM_TIMEDWAIT 1 + +/* Define to 1 if you have the `setitimer' function. */ +#define HAVE_SETITIMER 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SETJMP_H 1 + +/* Define to 1 if you have the `setmntent' function. */ +#define HAVE_SETMNTENT 1 + +/* Define to 1 if you have the `setpgid' function. */ +#define HAVE_SETPGID 1 + +/* Define to 1 if you have the `setrlimit' function. */ +#define HAVE_SETRLIMIT 1 + +/* Define to 1 if you have the `sigaction' function. */ +#define HAVE_SIGACTION 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SIGNAL_H 1 + +/* Define to 1 if you have the `sigset' function. */ +/* #undef HAVE_SIGSET */ + +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SOCKET_H */ + +/* Define to 1 if the system has the type `socklen_t'. */ +#define HAVE_SOCKLEN_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDARG_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strcasecmp' function. */ +#define HAVE_STRCASECMP 1 + +/* Define to 1 if you have the `strdup' function. */ +#define HAVE_STRDUP 1 + +/* Define to 1 if you have the `strerror_r' function. */ +#define HAVE_STRERROR_R 1 + +/* Define to 1 if you have the `stricmp' function. */ +/* #undef HAVE_STRICMP */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strncasecmp' function. */ +#define HAVE_STRNCASECMP 1 + +/* Define to 1 if you have the `strnicmp' function. */ +/* #undef HAVE_STRNICMP */ + +/* Define this if struct dirent has d_type */ +#define HAVE_STRUCT_DIRENT_D_TYPE 1 + +/* Define to 1 if the system has the type `struct xdr_ops'. */ +#define HAVE_STRUCT_XDR_OPS 1 + +/* Define to 1 if the system has the type `struct XDR::xdr_ops'. */ +/* #undef HAVE_STRUCT_XDR__XDR_OPS */ + +/* Define to 1 if you have the `swab' function. */ +#define HAVE_SWAB 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_DIR_H */ + +/* + * For SYS_gettid + * Define to 1 if you have the header file + * MANUALLY ADDED + */ +#define HAVE_SYS_SYSCALL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_FILE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IPC_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_MNTENT_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_MNTTAB_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_MOUNT_H 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_RESOURCE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SEM_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SIGINFO_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SIGNAL_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SOCKIO_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +/* Deprecated in android-24 */ +#undef HAVE_SYS_TIMEB_H + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_UIO_H 1 + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the `tcgetattr' function. */ +#define HAVE_TCGETATTR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_TERMIO_H 1 + +/* Define to 1 if you have the `time' function. */ +#define HAVE_TIME 1 + +/* Define to 1 if you have the `times' function. */ +#define HAVE_TIMES 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_UTIME_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_VARARGS_H */ + +/* Define this if va_copy() is defined in stdarg.h */ +#define HAVE_VA_COPY 1 + +/* Define to 1 if you have the `vfork' function. */ +#define HAVE_VFORK 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_VFORK_H */ + +/* Define to 1 if you have the `vsnprintf' function. */ +#define HAVE_VSNPRINTF 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define to 1 if `fork' works. */ +#define HAVE_WORKING_FORK 1 + +/* Define to 1 if `vfork' works. */ +#define HAVE_WORKING_VFORK 1 + +/* Define to 1 if you have the file `AC_File'. */ +#define HAVE__PROC_SELF_EXE 1 + +/* Define to 1 if you have the `_swab' function. */ +/* #undef HAVE__SWAB */ + +/* Define it if compiler supports ISO syntax for thread-local storage */ +#define HAVE___THREAD 1 + +/* Define this if CPU is HPPA */ +/* #undef HPPA */ + +/* Define this if OS is HP-UX */ +/* #undef HPUX */ + +/* Define this if OS is Linux */ +#define LINUX 1 + +/* Define this if OS is NetBSD */ +/* #undef NETBSD */ + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "" + +/* Define to the necessary symbol if this constant uses a non-standard name on + your system. */ +/* #undef PTHREAD_CREATE_JOINABLE */ + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE void + +/* Define to 1 if the `setpgrp' function takes no argument. */ +#define SETPGRP_VOID 1 + +/* Architecture is big-edian sh4 */ +/* #undef SHEB */ + +/* Extension for shared libraries */ +#define SHRLIB_EXT "so" + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG 8 + +/* The size of `size_t', as computed by sizeof. */ +#define SIZEOF_SIZE_T 8 + +/* The size of `void *', as computed by sizeof. */ +#define SIZEOF_VOID_P 8 + + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define this if databases on raw devices should be supported */ +#define SUPPORT_RAW_DEVICES 1 + +/* Define to 1 if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* Define this if OS is Windows NT */ +/* #undef WIN_NT */ + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Define this if sem_init() works on the platform */ +#define WORKING_SEM_INIT 1 + +/* Number of bits in a file offset, on hosts where this is settable. */ +#define _FILE_OFFSET_BITS 64 + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* Define to `long int' if does not define. */ +/* #undef off_t */ + +/* Define to `int' if does not define. */ +/* #undef pid_t */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + +/* Define to `int' if doesn't define. */ +/* #undef uid_t */ + +/* Define as `fork' if `vfork' does not work. */ +/* #undef vfork */ + +/* Define to empty if the keyword `volatile' does not work. Warning: valid + code using `volatile' can become incorrect without. Disable with care. */ +/* #undef volatile */ + +#ifdef GETTIMEOFDAY_RETURNS_TIMEZONE +#define GETTIMEOFDAY(x) gettimeofday((x), (struct timezone *)0) +#else +#define GETTIMEOFDAY(x) gettimeofday((x)) +#endif + +#ifndef HAVE_SOCKLEN_T +typedef int socklen_t; +#endif diff --git a/cross/firebird/src/make.synology.aarch64 b/cross/firebird/src/make.synology.aarch64 new file mode 100644 index 00000000000..aadd6cdb510 --- /dev/null +++ b/cross/firebird/src/make.synology.aarch64 @@ -0,0 +1,39 @@ +# vim: syntax=make +# +# This file is copied to firebird/builds/posix/ and from there is used by +# the ./configure --with-cross-build=xxx, where the resulting file name is +# firebird/builds/posix/make.xxx +# + +export CXX:=$(CROSS_TOOLCHAIN)g++ +export CC:=$(CROSS_TOOLCHAIN)gcc +export AR:=$(CROSS_TOOLCHAIN)ar +export AS:=$(CROSS_TOOLCHAIN)as +export LD:=$(CROSS_TOOLCHAIN)ld +export NM:=$(CROSS_TOOLCHAIN)nm +export OBJCOPY:=$(CROSS_TOOLCHAIN)objcopy +export OBJDUMP:=$(CROSS_TOOLCHAIN)objdump +export RANLIB:=$(CROSS_TOOLCHAIN)ranlib +export STRIP:=$(CROSS_TOOLCHAIN)strip + +# This file is loaded after makefile.defaults and we can use it to override +# variables defined therein. The AC_CFLAGS/AC_CXXFLAGS normally contains flags +# that were present in an environment during the ./configure step, which we +# do not want here, because the configure flags were for cross1 native step. +export AC_CFLAGS := +export AC_CXXFLAGS := + +COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DARM64 -pipe -MMD \ + -fPIC -fmessage-length=0 -fsigned-char + +OPTIMIZE_FLAGS=-fno-omit-frame-pointer +WARN_FLAGS=-Wall -Wno-switch -Wno-parentheses -Wno-unknown-pragmas -Wno-unused-variable + +PROD_FLAGS=$(COMMON_FLAGS) $(OPTIMIZE_FLAGS) +DEV_FLAGS=$(COMMON_FLAGS) $(WARN_FLAGS) + +CROSS_CONFIG=synology.aarch64.h + +.PHONY: prerequisites +prerequisites: + diff --git a/cross/firebird/src/make.synology.armv7 b/cross/firebird/src/make.synology.armv7 new file mode 100644 index 00000000000..8bd8c452e6c --- /dev/null +++ b/cross/firebird/src/make.synology.armv7 @@ -0,0 +1,40 @@ +# vim: syntax=make +# +# This file is copied to firebird/builds/posix/ and from there is used by +# the ./configure --with-cross-build=xxx, where the resulting file name is +# firebird/builds/posix/make.xxx +# + +export CXX:=$(CROSS_TOOLCHAIN)g++ +export CC:=$(CROSS_TOOLCHAIN)gcc +export AR:=$(CROSS_TOOLCHAIN)ar +export AS:=$(CROSS_TOOLCHAIN)as +export LD:=$(CROSS_TOOLCHAIN)ld +export NM:=$(CROSS_TOOLCHAIN)nm +export OBJCOPY:=$(CROSS_TOOLCHAIN)objcopy +export OBJDUMP:=$(CROSS_TOOLCHAIN)objdump +export RANLIB:=$(CROSS_TOOLCHAIN)ranlib +export STRIP:=$(CROSS_TOOLCHAIN)strip + +# This file is loaded after makefile.defaults and we can use it to override +# variables defined therein. The AC_CFLAGS/AC_CXXFLAGS normally contains flags +# that were present in an environment during the ./configure step, which we +# do not want here, because the configure flags were for cross1 native step. +export AC_CFLAGS := +export AC_CXXFLAGS := + +COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DARM -pipe -MMD \ + -fPIC -fmessage-length=0 -fsigned-char + + +OPTIMIZE_FLAGS=-fno-omit-frame-pointer +WARN_FLAGS=-Wall -Wno-switch -Wno-parentheses -Wno-unknown-pragmas -Wno-unused-variable + +PROD_FLAGS=$(COMMON_FLAGS) $(OPTIMIZE_FLAGS) +DEV_FLAGS=$(COMMON_FLAGS) $(WARN_FLAGS) + +CROSS_CONFIG=synology.armv7.h + +.PHONY: prerequisites +prerequisites: + diff --git a/cross/firebird/src/make.synology.x64 b/cross/firebird/src/make.synology.x64 new file mode 100644 index 00000000000..5ef25579ea3 --- /dev/null +++ b/cross/firebird/src/make.synology.x64 @@ -0,0 +1,41 @@ +# vim: syntax=make +# +# This file is copied to firebird/builds/posix/ and from there is used by +# the ./configure --with-cross-build=xxx, where the resulting file name is +# firebird/builds/posix/make.xxx +# + +export CXX:=$(CROSS_TOOLCHAIN)g++ +export CC:=$(CROSS_TOOLCHAIN)gcc +export AR:=$(CROSS_TOOLCHAIN)ar +export AS:=$(CROSS_TOOLCHAIN)as +export LD:=$(CROSS_TOOLCHAIN)ld +export NM:=$(CROSS_TOOLCHAIN)nm +export OBJCOPY:=$(CROSS_TOOLCHAIN)objcopy +export OBJDUMP:=$(CROSS_TOOLCHAIN)objdump +export RANLIB:=$(CROSS_TOOLCHAIN)ranlib +export STRIP:=$(CROSS_TOOLCHAIN)strip + +# This file is loaded after makefile.defaults and we can use it to override +# variables defined therein. The AC_CFLAGS/AC_CXXFLAGS normally contains flags +# that were present in an environment during the ./configure step, which we +# do not want here, because the configure flags were for cross1 native step. +export AC_CFLAGS := +export AC_CXXFLAGS := + +COMMON_FLAGS=-ggdb -DFB_SEND_FLAGS=MSG_NOSIGNAL -DLINUX -DAMD64 -pipe -MMD -fPIC -fmessage-length=0 + +OPTIMIZE_FLAGS=-fno-omit-frame-pointer +WARN_FLAGS=-Wall -Wno-switch -Wno-parentheses -Wno-unknown-pragmas -Wno-unused-variable + +PROD_FLAGS=$(COMMON_FLAGS) $(OPTIMIZE_FLAGS) +DEV_FLAGS=$(COMMON_FLAGS) $(WARN_FLAGS) + +CROSS_CONFIG=synology.x64.h + +.PHONY: prerequisites +prerequisites: + +# This file must be compiled with SSE4.2 support +%/CRC32C.o: COMMON_FLAGS += -msse4 + From c108b230e408346defc72220a79a4a0468ee046e Mon Sep 17 00:00:00 2001 From: Vit Kabele Date: Sat, 29 Jul 2023 20:35:23 +0200 Subject: [PATCH 03/15] Add spk/firebird (#5837) Create spk package definition with service configuration and package icon. Also provide UI install wizard to allow the user choose the password for the SYSDBA user. --- spk/firebird/Makefile | 33 ++++++++++++++++++++++ spk/firebird/src/firebird.png | Bin 0 -> 67507 bytes spk/firebird/src/service-setup.sh | 37 +++++++++++++++++++++++++ spk/firebird/src/wizard/install_uifile | 22 +++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 spk/firebird/Makefile create mode 100644 spk/firebird/src/firebird.png create mode 100644 spk/firebird/src/service-setup.sh create mode 100644 spk/firebird/src/wizard/install_uifile diff --git a/spk/firebird/Makefile b/spk/firebird/Makefile new file mode 100644 index 00000000000..eea6bcbaccd --- /dev/null +++ b/spk/firebird/Makefile @@ -0,0 +1,33 @@ +SPK_NAME = firebird +SPK_VERS = 4.0.3 +SPK_ICON = src/firebird.png +SPK_REV = 1 + +BETA = 1 + +DEPENDS = cross/$(SPK_NAME) + +include ../../mk/spksrc.common.mk + +DISPLAY_NAME = FirebirdSQL +DESCRIPTION = Firebird is a relational database with excelent concurrency and high performance. +CHANGELOG = "Add FirebirdSQL DB server in version 4.0.2" +HOMEPAGE = https://firebirdsql.org/ +MAINTAINER = vitkabele +LICENSE = MPL + +OS_MIN_VERS = 7.0 +REQUIRED_MIN_DSM = 7.0 +REQUIRED_MAX_DSM = 7.1 + +WIZARDS_DIR = src/wizard + +# Startable service properties +STARTABLE = yes +SERVICE_SETUP = src/service-setup.sh +SERVICE_USER = auto +SERVICE_PORT = 3050 +SERVICE_PORT_TITLE = $(DISPLAY_NAME) + +include ../../mk/spksrc.spk.mk + diff --git a/spk/firebird/src/firebird.png b/spk/firebird/src/firebird.png new file mode 100644 index 0000000000000000000000000000000000000000..b99ebe76bd8fe7c65609a9a80b8b8d302c1077f7 GIT binary patch literal 67507 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 literal 0 HcmV?d00001 diff --git a/spk/firebird/src/service-setup.sh b/spk/firebird/src/service-setup.sh new file mode 100644 index 00000000000..c7d2012f9ac --- /dev/null +++ b/spk/firebird/src/service-setup.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +FBGUARD_BIN_FILE="${SYNOPKG_PKGDEST}/bin/fbguard" + +# We set onetime because we want the systemd to take care about the failures +SERVICE_COMMAND="${FBGUARD_BIN_FILE} -pidfile ${PID_FILE} -daemon -onetime" + +SYSDBA_PASSWORD_FILE="${SYNOPKG_PKGDEST}/SYSDBA.password" + +service_postinst () { + set -x + cd "$SYNOPKG_PKGDEST" || exit 1 + bin/gbak -rep msg.gbak msg.fdb + bin/build_file + + # Make the message file accessible so other users can use isql + chmod go+r firebird.msg + + bin/gbak -rep security4.gbak security4.fdb + + echo "Remove unnecessary intermediate files" + rm -f bin/build_file msg.gbak msg.fdb security4.gbak + + if [ ! -f "${SYSDBA_PASSWORD_FILE}" ];then + SYSDBA_PASSWORD="${wizard_sysdba_password}" + + echo "Setting 'SYSDBA' password to '${SYSDBA_PASSWORD}'"; + + echo "create or alter user SYSDBA password '$SYSDBA_PASSWORD' using plugin Srp; commit; quit;" \ + | bin/isql -user sysdba security.db + + echo "$SYSDBA_PASSWORD" > "${SYSDBA_PASSWORD_FILE}"; + fi + + set +x +} + diff --git a/spk/firebird/src/wizard/install_uifile b/spk/firebird/src/wizard/install_uifile new file mode 100644 index 00000000000..1a31cf039af --- /dev/null +++ b/spk/firebird/src/wizard/install_uifile @@ -0,0 +1,22 @@ +[ + { + "step_title": "Configuration of FirebirdSQL server", + "items": [ + { + "type": "textfield", + "desc": "SYSDBA user", + "subitems": [ + { + "key": "wizard_sysdba_password", + "desc": "User password", + "defaultValue": "masterpassword", + "validator": { + "allowBlank": false + } + } + ] + } + ] + } +] + From 62172ff9c87d74bf84d780065c973ff047a4ea93 Mon Sep 17 00:00:00 2001 From: mreid-tt <943378+mreid-tt@users.noreply.github.com> Date: Fri, 11 Aug 2023 19:18:02 -0400 Subject: [PATCH 04/15] High-quality logo Logo created from https://firebirdsql.org/en/logos/ --- spk/firebird/src/firebird.png | Bin 67507 -> 17773 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 spk/firebird/src/firebird.png diff --git a/spk/firebird/src/firebird.png b/spk/firebird/src/firebird.png old mode 100644 new mode 100755 index b99ebe76bd8fe7c65609a9a80b8b8d302c1077f7..3e4e42df779fcd98f24712b01392d0f8f552e79c GIT binary patch literal 17773 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%0AxnREB5h`}Govaj3sHD=g%rT6uQ2z%4a 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 literal 67507 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 From a3a2a0cb4d96ff71cfc95dcf436c54e655fde2e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Sun, 13 Aug 2023 22:44:02 +0200 Subject: [PATCH 05/15] [firebird] Define PKG_DIST_FILE variable in cross/firebird/Makefile (#5837) --- cross/firebird/Makefile | 1 + cross/firebird/digests | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cross/firebird/Makefile b/cross/firebird/Makefile index 9934a46f80a..3e238ab5ef7 100644 --- a/cross/firebird/Makefile +++ b/cross/firebird/Makefile @@ -3,6 +3,7 @@ PKG_VERS = 4.0.3 PKG_EXT = tar.gz PKG_DIST_NAME = v$(PKG_VERS).$(PKG_EXT) PKG_DIST_SITE = https://github.com/FirebirdSQL/firebird/archive/refs/tags +PKG_DIST_FILE = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) PKG_DIR = $(PKG_NAME)-$(PKG_VERS) DEPENDS = cross/zlib cross/libicu native/libicu native/libtool diff --git a/cross/firebird/digests b/cross/firebird/digests index 7133bd6da93..db83b1a9b1f 100644 --- a/cross/firebird/digests +++ b/cross/firebird/digests @@ -1,3 +1,3 @@ -v4.0.3.tar.gz SHA1 02dd8914e80acef2a662eab42b7ee5a3dc41248e -v4.0.3.tar.gz SHA256 90b799043c83325479989b1f44116d1f0112f77c5def4bb452470bf7a0dcc138 -v4.0.3.tar.gz MD5 1d57b5ee362be4c0b2c3f28e78f69aaf +firebird-4.0.3.tar.gz SHA1 02dd8914e80acef2a662eab42b7ee5a3dc41248e +firebird-4.0.3.tar.gz SHA256 90b799043c83325479989b1f44116d1f0112f77c5def4bb452470bf7a0dcc138 +firebird-4.0.3.tar.gz MD5 1d57b5ee362be4c0b2c3f28e78f69aaf From edd5643c4efbbd814aedb27b1ac399511856bcfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Mon, 14 Aug 2023 09:32:53 +0200 Subject: [PATCH 06/15] [firebird] Remove BETA and redundant include from spk/firebird/Makefile (#5837) --- spk/firebird/Makefile | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spk/firebird/Makefile b/spk/firebird/Makefile index eea6bcbaccd..500d46bfd3e 100644 --- a/spk/firebird/Makefile +++ b/spk/firebird/Makefile @@ -3,15 +3,11 @@ SPK_VERS = 4.0.3 SPK_ICON = src/firebird.png SPK_REV = 1 -BETA = 1 - DEPENDS = cross/$(SPK_NAME) -include ../../mk/spksrc.common.mk - DISPLAY_NAME = FirebirdSQL DESCRIPTION = Firebird is a relational database with excelent concurrency and high performance. -CHANGELOG = "Add FirebirdSQL DB server in version 4.0.2" +CHANGELOG = "Add FirebirdSQL DB server in version 4.0.3" HOMEPAGE = https://firebirdsql.org/ MAINTAINER = vitkabele LICENSE = MPL From e5ef0f7083c77be820d6aeccb0b00db66f1a42e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Mon, 14 Aug 2023 10:53:00 +0200 Subject: [PATCH 07/15] [firebird] Update input type in install wizard --- spk/firebird/src/wizard/install_uifile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spk/firebird/src/wizard/install_uifile b/spk/firebird/src/wizard/install_uifile index 1a31cf039af..56df1923b8d 100644 --- a/spk/firebird/src/wizard/install_uifile +++ b/spk/firebird/src/wizard/install_uifile @@ -3,13 +3,12 @@ "step_title": "Configuration of FirebirdSQL server", "items": [ { - "type": "textfield", + "type": "password", "desc": "SYSDBA user", "subitems": [ { "key": "wizard_sysdba_password", - "desc": "User password", - "defaultValue": "masterpassword", + "desc": "Password", "validator": { "allowBlank": false } From f6cc62794c879a34b5a4c1b67879b750c2cde5db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Mon, 14 Aug 2023 10:57:02 +0200 Subject: [PATCH 08/15] [firebird] Remove shebang and move SYSDBA.password to PKGVAR (#5837) --- spk/firebird/src/service-setup.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spk/firebird/src/service-setup.sh b/spk/firebird/src/service-setup.sh index c7d2012f9ac..c25265805fd 100644 --- a/spk/firebird/src/service-setup.sh +++ b/spk/firebird/src/service-setup.sh @@ -1,11 +1,11 @@ -#!/bin/sh - +# Fbguard binary is a wrapper around firebird that allows it to run as +# a daemon FBGUARD_BIN_FILE="${SYNOPKG_PKGDEST}/bin/fbguard" # We set onetime because we want the systemd to take care about the failures SERVICE_COMMAND="${FBGUARD_BIN_FILE} -pidfile ${PID_FILE} -daemon -onetime" -SYSDBA_PASSWORD_FILE="${SYNOPKG_PKGDEST}/SYSDBA.password" +SYSDBA_PASSWORD_FILE="${SYNOPKG_PKGVAR}/SYSDBA.password" service_postinst () { set -x From 585124de98c3dca154e985c7eb94bce7513a1dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Mon, 14 Aug 2023 21:02:05 +0200 Subject: [PATCH 09/15] [firebird] Remove useless and obsolete files from PLIST (#5837) --- cross/firebird/PLIST | 9 --------- 1 file changed, 9 deletions(-) diff --git a/cross/firebird/PLIST b/cross/firebird/PLIST index 23b6be0838a..15dd14baff0 100644 --- a/cross/firebird/PLIST +++ b/cross/firebird/PLIST @@ -1,8 +1,5 @@ -rsc:CHANGELOG.md rsc:IDPLicense.txt rsc:IPLicense.txt -rsc:README.md -rsc:bin/changeServerMode.sh rsc:bin/fb_config bin:bin/build_file bin:bin/fb_lock_print @@ -12,20 +9,17 @@ bin:bin/fbtracemgr bin:bin/firebird bin:bin/gbak bin:bin/gfix -bin:bin/gpre bin:bin/gsec bin:bin/gsplit bin:bin/gstat bin:bin/isql bin:bin/nbackup -bin:bin/qli rsc:bin/registerDatabase.sh rsc:databases.conf rsc:fbtrace.conf rsc:firebird.conf rsc:security4.gbak rsc:msg.gbak -rsc:help/help.gbak rsc:intl/fbintl rsc:intl/fbintl.conf lnk:lib/libfbclient.so @@ -33,9 +27,6 @@ lnk:lib/libfbclient.so.2 lib:lib/libfbclient.so.4.0.3 lib:lib/libib_util.so rsc:misc/intl.sql -rsc:misc/rc.config.firebird -rsc:misc/upgrade/udf/udf_replace.sql -rsc:misc/upgrade/udf/udf_replace.txt rsc:plugins.conf lib:plugins/libChaCha.so lib:plugins/libEngine13.so From 18969c834f00d0e9e2a88c45748ab3cdebabb4df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Tue, 15 Aug 2023 00:14:30 +0200 Subject: [PATCH 10/15] [firebird] Define security database location as $SYNOPKG_PKGVAR So that the security database survives an upgrade. --- cross/firebird/Makefile | 7 ++++++- cross/firebird/src/cross_config/synology.aarch64.h | 5 +---- cross/firebird/src/cross_config/synology.armv7.h | 5 +---- cross/firebird/src/cross_config/synology.x64.h | 5 +---- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/cross/firebird/Makefile b/cross/firebird/Makefile index 3e238ab5ef7..6041e4dd820 100644 --- a/cross/firebird/Makefile +++ b/cross/firebird/Makefile @@ -38,9 +38,14 @@ COMPILE_TARGET = firebird_compile INSTALL_TARGET = firebird_install +# We must forward-declare the PKGVAR here as we must compile its value to the +# binaries. We only support DSM7 so we do not worry about DSM6 compatibility +SYNOPKG_PKGVAR = /var/packages/$(PKG_NAME)/var + # CXXFLAGS should be set fine by the spksrc for cross-compilation, we will # use it in cross2 step CROSS_ENV -ADDITIONAL_CXXFLAGS = -Wno-invalid-offsetof +ADDITIONAL_CXXFLAGS = -Wno-invalid-offsetof \ + '-DFB_SECDBDIR="\"$(SYNOPKG_PKGVAR)\""' # Path to the libtool installed in the cross/libtool DEPENDS target # We need the native libtool for building libommath/libtomcrypt in cross1 step diff --git a/cross/firebird/src/cross_config/synology.aarch64.h b/cross/firebird/src/cross_config/synology.aarch64.h index d8bd0907820..8d839b2eea0 100644 --- a/cross/firebird/src/cross_config/synology.aarch64.h +++ b/cross/firebird/src/cross_config/synology.aarch64.h @@ -17,9 +17,6 @@ /* Define this if paths are case sensitive */ #define CASE_SENSITIVITY false -/* Define this if OS is DARWIN */ -/* #undef DARWIN */ - /* Use binary relocation? */ #define ENABLE_BINRELOC @@ -87,7 +84,7 @@ #define FB_SBINDIR "" /* security database DIR (PREFIX) */ -#define FB_SECDBDIR "" +/* #define FB_SECDBDIR "" */ /* Inet service name */ #define FB_SERVICE_NAME "gds_db" diff --git a/cross/firebird/src/cross_config/synology.armv7.h b/cross/firebird/src/cross_config/synology.armv7.h index 65187573ce9..6368220eb20 100644 --- a/cross/firebird/src/cross_config/synology.armv7.h +++ b/cross/firebird/src/cross_config/synology.armv7.h @@ -23,9 +23,6 @@ /* Define this if paths are case sensitive */ #define CASE_SENSITIVITY false -/* Define this if OS is DARWIN */ -/* #undef DARWIN */ - /* Use binary relocation? */ #define ENABLE_BINRELOC @@ -93,7 +90,7 @@ #define FB_SBINDIR "" /* security database DIR (PREFIX) */ -#define FB_SECDBDIR "" +/* #define FB_SECDBDIR "" */ /* Inet service name */ #define FB_SERVICE_NAME "gds_db" diff --git a/cross/firebird/src/cross_config/synology.x64.h b/cross/firebird/src/cross_config/synology.x64.h index 4d730f3e141..6936e610c5d 100644 --- a/cross/firebird/src/cross_config/synology.x64.h +++ b/cross/firebird/src/cross_config/synology.x64.h @@ -17,9 +17,6 @@ /* Define this if paths are case sensitive */ #define CASE_SENSITIVITY false -/* Define this if OS is DARWIN */ -/* #undef DARWIN */ - /* Use binary relocation? */ #define ENABLE_BINRELOC @@ -87,7 +84,7 @@ #define FB_SBINDIR "" /* security database DIR (PREFIX) */ -#define FB_SECDBDIR "" +/* #define FB_SECDBDIR "" */ /* Inet service name */ #define FB_SERVICE_NAME "gds_db" From 9bcf3402585fff711c88fb51a27a59564fef49c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Tue, 15 Aug 2023 00:16:52 +0200 Subject: [PATCH 11/15] [firebird] Explain what is SYSDBA user in the install_uifile (#5837) --- spk/firebird/src/wizard/install_uifile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spk/firebird/src/wizard/install_uifile b/spk/firebird/src/wizard/install_uifile index 56df1923b8d..a4c49338c26 100644 --- a/spk/firebird/src/wizard/install_uifile +++ b/spk/firebird/src/wizard/install_uifile @@ -4,7 +4,7 @@ "items": [ { "type": "password", - "desc": "SYSDBA user", + "desc": "SYSDBA user (the Firebird administrator account)", "subitems": [ { "key": "wizard_sysdba_password", From fe8628cee0915c5df7c3e74cd5ad20d4f2bb6807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Tue, 15 Aug 2023 09:47:18 +0200 Subject: [PATCH 12/15] [firebird] The service-setup now sets sysdba password more carefully (#5837) Depending on the existence of SYSDBA.password file and install/upgrade. --- spk/firebird/src/service-setup.sh | 92 +++++++++++++++++++++++++++---- 1 file changed, 80 insertions(+), 12 deletions(-) diff --git a/spk/firebird/src/service-setup.sh b/spk/firebird/src/service-setup.sh index c25265805fd..c6716060490 100644 --- a/spk/firebird/src/service-setup.sh +++ b/spk/firebird/src/service-setup.sh @@ -1,37 +1,105 @@ # Fbguard binary is a wrapper around firebird that allows it to run as # a daemon FBGUARD_BIN_FILE="${SYNOPKG_PKGDEST}/bin/fbguard" +FB_SECDB="${SYNOPKG_PKGVAR}/security4.fdb" # We set onetime because we want the systemd to take care about the failures SERVICE_COMMAND="${FBGUARD_BIN_FILE} -pidfile ${PID_FILE} -daemon -onetime" SYSDBA_PASSWORD_FILE="${SYNOPKG_PKGVAR}/SYSDBA.password" +validate_preupgrade () { + # We must check that either SYSDBA.password or the security database + # exists. + # If neither of them is present, we don't know how to set the main + # DB password. + [ -f "$SYSDBA_PASSWORD_FILE" ] || [ -f "$FB_SECDB" ] || { + install_log "Neither SYSDBA.password nor security4.fdb exists."; + exit 1; + }; +} + +gen_password() { + head -c20 /dev/urandom | base64 +} + service_postinst () { - set -x - cd "$SYNOPKG_PKGDEST" || exit 1 + cd "$SYNOPKG_PKGDEST" + SET_PASSWD=false + SECDB_CREATED=false + + # =================== Build Messages ======================== + # Build the firebird.msg file during both install and upgrade. + # The messages differ across versions and must always match the binaries + # version. + # Building the messages should be first step because the tools used here + # later are already expectine the message file to exist. bin/gbak -rep msg.gbak msg.fdb bin/build_file - # Make the message file accessible so other users can use isql + # Publish the message file so that other users can use isql + # (isql and other cli tools access the file to translate sql errors) chmod go+r firebird.msg - bin/gbak -rep security4.gbak security4.fdb - echo "Remove unnecessary intermediate files" - rm -f bin/build_file msg.gbak msg.fdb security4.gbak + rm -f bin/build_file msg.gbak msg.fdb - if [ ! -f "${SYSDBA_PASSWORD_FILE}" ];then - SYSDBA_PASSWORD="${wizard_sysdba_password}" + # =================== Build Security Database =============== + # Build security database only when none is present yet or we are being + # installed + if [ ! -f "$FB_SECDB" ] || [ "$SYNOPKG_PKG_STATUS" = "INSTALL" ];then + bin/gbak -rep security4.gbak "$FB_SECDB" + + # We just built the security database. We must also set the password. + SECDB_CREATED=true + fi + + # We already built the DB. This is no longer needed. + rm -f security4.gbak + + # =================== Set SYSDBA password =================== + # + # Setting the SYSDBA password is somewhat tricky: + # - When being installed from the UI, the password is provided by the wizard + # - When being installed from cli, no wizard runs and we get empty string + # in such case we generate new password and announce it in the log. + # - When upgrading, we usually don't have to do anything, unless the user + # deleted the security database and is re-installing the package + # to fix it. Then: + # o We either use the password from SYSDBA.password file (if it exists) + # o Or generate new random password and announce it in the log. + # - Upgrades where security.db exists are best because we don't do anything. + # + if [ "$SYNOPKG_PKG_STATUS" = "INSTALL" ]; then + if [ "x$wizard_sysdba_password" = "x" ]; then + # User provided new password. We override the password file even + # if it exists because the user expects to have the new password. + gen_password > "$SYSDBA_PASSWORD_FILE"; + else + # Use the users password + printf "%s" "$wizard_sysdba_password" > "$SYSDBA_PASSWORD_FILE" + fi + SET_PASSWD=true + else #UPGRADING + if $SECDB_CREATED && [ ! -f "$SYSDBA_PASSWORD_FILE" ]; then + # We are upgrading/re-installing and the user deleted + # both the password file and the database file + gen_password > "$SYSDBA_PASSWORD_FILE"; + SET_PASSWD=true + fi + fi + + # =================== Set SYSDBA password =================== + if "$SET_PASSWD"; then + # The file must exist otherwise we wouldn't be here + SYSDBA_PASSWORD="$(cat "$SYSDBA_PASSWORD_FILE")" echo "Setting 'SYSDBA' password to '${SYSDBA_PASSWORD}'"; + # The security.db here refers to the database alias defined in + # databases.conf and does not reflect the real file location echo "create or alter user SYSDBA password '$SYSDBA_PASSWORD' using plugin Srp; commit; quit;" \ | bin/isql -user sysdba security.db - - echo "$SYSDBA_PASSWORD" > "${SYSDBA_PASSWORD_FILE}"; fi - - set +x } From 4e39aebcab78168541568c14f7ce58778504c5bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Sun, 20 Aug 2023 10:43:58 +0200 Subject: [PATCH 13/15] Don't use install_log in service-setup.sh script Co-authored-by: hgy59 --- spk/firebird/src/service-setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spk/firebird/src/service-setup.sh b/spk/firebird/src/service-setup.sh index c6716060490..dbb02073712 100644 --- a/spk/firebird/src/service-setup.sh +++ b/spk/firebird/src/service-setup.sh @@ -14,7 +14,7 @@ validate_preupgrade () { # If neither of them is present, we don't know how to set the main # DB password. [ -f "$SYSDBA_PASSWORD_FILE" ] || [ -f "$FB_SECDB" ] || { - install_log "Neither SYSDBA.password nor security4.fdb exists."; + echo "Neither SYSDBA.password nor security4.fdb exists." exit 1; }; } From 808b003ca80379bd8a8e281108c4e6132df0d296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Sat, 19 Aug 2023 06:00:00 +0200 Subject: [PATCH 14/15] Do not even build the binaries not added to the plist --- .../0002-do-not-build-qli-gpre-examples.patch | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 cross/firebird/patches/0002-do-not-build-qli-gpre-examples.patch diff --git a/cross/firebird/patches/0002-do-not-build-qli-gpre-examples.patch b/cross/firebird/patches/0002-do-not-build-qli-gpre-examples.patch new file mode 100644 index 00000000000..7a9075ca7d8 --- /dev/null +++ b/cross/firebird/patches/0002-do-not-build-qli-gpre-examples.patch @@ -0,0 +1,21 @@ +--- builds/posix/Makefile.in.1 2023-08-18 21:59:51.408045740 +0200 ++++ builds/posix/Makefile.in 2023-08-18 22:03:41.578508436 +0200 +@@ -348,9 +348,7 @@ cross2: + $(MAKE) engine + $(MAKE) fbintl + $(MAKE) utilities +- $(MAKE) $(GPRE) + $(MAKE) plugins +- $(MAKE) -f Makefile.plugins_examples + $(MAKE) cross_rest + + +@@ -660,7 +658,7 @@ GBAK_FILES := $(subst Native,$(TARGET),$ + + rest: qli message_file tzdata + +-cross_rest: qli gbak_files ++cross_rest: gbak_files + $(MAKE) $(BUILD_FILE) + + qli: $(QLI) From 48123ab6dae6a50d2c1d5e12fc882373f6327c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Kabele?= Date: Tue, 22 Aug 2023 11:51:17 +0200 Subject: [PATCH 15/15] [firebird] Move config files to $SYNOPKG_PKGVAR Declare the FB_* paths in the C(XX)FLAGS in the cross/Makefile instead of in the cross_config include files. These paths affect the runtime behavior of Firebird and must match the path on the installed system. The paths for configuration ($SYNOPKG_PKGVAR) however differ during install and runtime, as the installer script moves the content of $PREFIX/var to $SYNOPKG_PKGVAR during installation. The change of FB_CONFDIR also changes the PREFIX a.k.a. root directory of the whole Firebird installation and when modified, all other paths must be explicitly specified. --- cross/firebird/Makefile | 26 ++++++++++++-- cross/firebird/PLIST | 14 ++++---- .../src/cross_config/synology.aarch64.h | 34 +++++++++---------- .../src/cross_config/synology.armv7.h | 34 +++++++++---------- .../firebird/src/cross_config/synology.x64.h | 34 +++++++++---------- 5 files changed, 81 insertions(+), 61 deletions(-) diff --git a/cross/firebird/Makefile b/cross/firebird/Makefile index 6041e4dd820..5edfd1c915a 100644 --- a/cross/firebird/Makefile +++ b/cross/firebird/Makefile @@ -41,11 +41,30 @@ INSTALL_TARGET = firebird_install # We must forward-declare the PKGVAR here as we must compile its value to the # binaries. We only support DSM7 so we do not worry about DSM6 compatibility SYNOPKG_PKGVAR = /var/packages/$(PKG_NAME)/var +SYNOPKG_PKGDEST = /var/packages/$(PKG_NAME)/target + +ADDITIONAL_CFLAGS = '-DFB_PREFIX="\"$(SYNOPKG_PKGDEST)\""' \ + '-DFB_SECDBDIR="\"$(SYNOPKG_PKGVAR)\""' \ + '-DFB_GUARDDIR="\"$(SYNOPKG_PKGVAR)\""' \ + '-DFB_CONFDIR="\"$(SYNOPKG_PKGVAR)\""' \ + '-DFB_SBINDIR="\"$(SYNOPKG_PKGDEST)/bin\""' \ + '-DFB_BINDIR="\"$(SYNOPKG_PKGDEST)/bin\""' \ + '-DFB_DOCDIR="\"$(SYNOPKG_PKGDEST)/doc\""' \ + '-DFB_HELPDIR="\"$(SYNOPKG_PKGDEST)/help\""' \ + '-DFB_SAMPLEDIR="\"$(SYNOPKG_PKGDEST)/examples\""' \ + '-DFB_PLUGDIR="\"$(SYNOPKG_PKGDEST)/plugins\""' \ + '-DFB_SAMPLEDBDIR="\"$(SYNOPKG_PKGDEST)/examples/empbuild\""' \ + '-DFB_TZDATADIR="\"$(SYNOPKG_PKGDEST)\""' \ + '-DFB_MISCDIR="\"$(SYNOPKG_PKGDEST)/misc\""' \ + '-DFB_MSGDIR="\"$(SYNOPKG_PKGDEST)\""' \ + '-DFB_INCDIR="\"$(SYNOPKG_PKGDEST)/include\""' \ + '-DFB_INTLDIR="\"$(SYNOPKG_PKGDEST)/intl\""' \ + '-DFB_LIBDIR="\"$(SYNOPKG_PKGDEST)/lib\""' \ + '-DFB_LOGDIR="\"$(SYNOPKG_PKGVAR)\""' # CXXFLAGS should be set fine by the spksrc for cross-compilation, we will # use it in cross2 step CROSS_ENV -ADDITIONAL_CXXFLAGS = -Wno-invalid-offsetof \ - '-DFB_SECDBDIR="\"$(SYNOPKG_PKGVAR)\""' +ADDITIONAL_CXXFLAGS = -Wno-invalid-offsetof $(ADDITIONAL_CFLAGS) # Path to the libtool installed in the cross/libtool DEPENDS target # We need the native libtool for building libommath/libtomcrypt in cross1 step @@ -61,7 +80,8 @@ include ../../mk/spksrc.cross-cc.mk # termlib and editline are disabled because we don't provide ncurses # and editline libraries CONFIGURE_ARGS = --without-termlib --with-builtin-tommath --with-builtin-tomcrypt \ - --without-editline --with-cross-build=synology.$(ARCH) --prefix=$(INSTALL_PREFIX) + --without-editline --with-cross-build=synology.$(ARCH) --prefix=$(INSTALL_PREFIX) \ + --with-fbconf=$(INSTALL_PREFIX)/var NATIVE_LIBICU_DIR := $(WORK_DIR)/../../../native/libicu/work-native/install/usr/local diff --git a/cross/firebird/PLIST b/cross/firebird/PLIST index 15dd14baff0..ccbefa80748 100644 --- a/cross/firebird/PLIST +++ b/cross/firebird/PLIST @@ -1,5 +1,5 @@ -rsc:IDPLicense.txt -rsc:IPLicense.txt +rsc:var/IDPLicense.txt +rsc:var/IPLicense.txt rsc:bin/fb_config bin:bin/build_file bin:bin/fb_lock_print @@ -15,9 +15,9 @@ bin:bin/gstat bin:bin/isql bin:bin/nbackup rsc:bin/registerDatabase.sh -rsc:databases.conf -rsc:fbtrace.conf -rsc:firebird.conf +rsc:var/databases.conf +rsc:var/fbtrace.conf +rsc:var/firebird.conf rsc:security4.gbak rsc:msg.gbak rsc:intl/fbintl @@ -27,7 +27,7 @@ lnk:lib/libfbclient.so.2 lib:lib/libfbclient.so.4.0.3 lib:lib/libib_util.so rsc:misc/intl.sql -rsc:plugins.conf +rsc:var/plugins.conf lib:plugins/libChaCha.so lib:plugins/libEngine13.so lib:plugins/libLegacy_Auth.so @@ -38,4 +38,4 @@ lib:plugins/libudr_engine.so lib:plugins/udr/libudf_compat.so rsc:plugins/udr/udf_compat.sql rsc:plugins/udr_engine.conf -rsc:replication.conf +rsc:var/replication.conf diff --git a/cross/firebird/src/cross_config/synology.aarch64.h b/cross/firebird/src/cross_config/synology.aarch64.h index 8d839b2eea0..b1c0dc2fc3f 100644 --- a/cross/firebird/src/cross_config/synology.aarch64.h +++ b/cross/firebird/src/cross_config/synology.aarch64.h @@ -24,64 +24,64 @@ #define FB_ALIGNMENT 8 /* executables DIR (PREFIX/bin) */ -#define FB_BINDIR "" +/* #define FB_BINDIR "" */ /* config files DIR (PREFIX) */ -#define FB_CONFDIR "" +/* #define FB_CONFDIR "" */ /* documentation root DIR (PREFIX/doc) */ -#define FB_DOCDIR "" +/* #define FB_DOCDIR "" */ /* Alignment of double */ #define FB_DOUBLE_ALIGN 8 /* guardian lock DIR (PREFIX) */ -#define FB_GUARDDIR "" +/* #define FB_GUARDDIR "" */ /* QLI help DIR (PREFIX/help) */ -#define FB_HELPDIR "" +/* #define FB_HELPDIR "" */ /* C/C++ header files DIR (PREFIX/include) */ -#define FB_INCDIR "" +/* #define FB_INCDIR "" */ /* international DIR (PREFIX/intl) */ -#define FB_INTLDIR "" +/* #define FB_INTLDIR "" */ /* Local IPC name */ #define FB_IPC_NAME "FirebirdIPI" /* object code libraries DIR (PREFIX/lib) */ -#define FB_LIBDIR "" +/* #define FB_LIBDIR "" */ /* log files DIR (PREFIX) */ -#define FB_LOGDIR "" +/* #define FB_LOGDIR "" */ /* misc DIR (PREFIX/misc) */ -#define FB_MISCDIR "" +/* #define FB_MISCDIR "" */ /* message files DIR (PREFIX) */ -#define FB_MSGDIR "" +/* #define FB_MSGDIR "" */ /* Wnet pipe name */ #define FB_PIPE_NAME "interbas" /* plugins DIR (PREFIX) */ -#define FB_PLUGDIR "" +/* #define FB_PLUGDIR "" */ /* tzdata DIR (PREFIX) */ -#define FB_TZDATADIR "" +/* #define FB_TZDATADIR "" */ /* Installation path prefix */ -#define FB_PREFIX "/usr/local/firebird" +/* #define FB_PREFIX "/usr/local/firebird" */ /* examples database DIR (PREFIX/examples/empbuild) */ -#define FB_SAMPLEDBDIR "" +/* #define FB_SAMPLEDBDIR "" */ /* examples DIR (PREFIX/examples) */ -#define FB_SAMPLEDIR "" +/* #define FB_SAMPLEDIR "" */ /* system admin executables DIR (PREFIX/bin) */ -#define FB_SBINDIR "" +/* #define FB_SBINDIR "" */ /* security database DIR (PREFIX) */ /* #define FB_SECDBDIR "" */ diff --git a/cross/firebird/src/cross_config/synology.armv7.h b/cross/firebird/src/cross_config/synology.armv7.h index 6368220eb20..b71c635dc5d 100644 --- a/cross/firebird/src/cross_config/synology.armv7.h +++ b/cross/firebird/src/cross_config/synology.armv7.h @@ -30,64 +30,64 @@ #define FB_ALIGNMENT 8 /* executables DIR (PREFIX/bin) */ -#define FB_BINDIR "" +/* #define FB_BINDIR "" */ /* config files DIR (PREFIX) */ -#define FB_CONFDIR "" +/* #define FB_CONFDIR "" */ /* documentation root DIR (PREFIX/doc) */ -#define FB_DOCDIR "" +/* #define FB_DOCDIR "" */ /* Alignment of double */ #define FB_DOUBLE_ALIGN 8 /* guardian lock DIR (PREFIX) */ -#define FB_GUARDDIR "" +/* #define FB_GUARDDIR "" */ /* QLI help DIR (PREFIX/help) */ -#define FB_HELPDIR "" +/* #define FB_HELPDIR "" */ /* C/C++ header files DIR (PREFIX/include) */ -#define FB_INCDIR "" +/* #define FB_INCDIR "" */ /* international DIR (PREFIX/intl) */ -#define FB_INTLDIR "" +/* #define FB_INTLDIR "" */ /* Local IPC name */ #define FB_IPC_NAME "FirebirdIPI" /* object code libraries DIR (PREFIX/lib) */ -#define FB_LIBDIR "" +/* #define FB_LIBDIR "" */ /* log files DIR (PREFIX) */ -#define FB_LOGDIR "" +/* #define FB_LOGDIR "" */ /* misc DIR (PREFIX/misc) */ -#define FB_MISCDIR "" +/* #define FB_MISCDIR "" */ /* message files DIR (PREFIX) */ -#define FB_MSGDIR "" +/* #define FB_MSGDIR "" */ /* Wnet pipe name */ #define FB_PIPE_NAME "interbas" /* plugins DIR (PREFIX) */ -#define FB_PLUGDIR "" +/* #define FB_PLUGDIR "" */ /* tzdata DIR (PREFIX) */ -#define FB_TZDATADIR "" +/* #define FB_TZDATADIR "" */ /* Installation path prefix */ -#define FB_PREFIX "/usr/local/firebird" +/* #define FB_PREFIX "/usr/local/firebird" */ /* examples database DIR (PREFIX/examples/empbuild) */ -#define FB_SAMPLEDBDIR "" +/* #define FB_SAMPLEDBDIR "" */ /* examples DIR (PREFIX/examples) */ -#define FB_SAMPLEDIR "" +/* #define FB_SAMPLEDIR "" */ /* system admin executables DIR (PREFIX/bin) */ -#define FB_SBINDIR "" +/* #define FB_SBINDIR "" */ /* security database DIR (PREFIX) */ /* #define FB_SECDBDIR "" */ diff --git a/cross/firebird/src/cross_config/synology.x64.h b/cross/firebird/src/cross_config/synology.x64.h index 6936e610c5d..48e8cf0b426 100644 --- a/cross/firebird/src/cross_config/synology.x64.h +++ b/cross/firebird/src/cross_config/synology.x64.h @@ -24,64 +24,64 @@ #define FB_ALIGNMENT 8 /* executables DIR (PREFIX/bin) */ -#define FB_BINDIR "" +/* #define FB_BINDIR "" */ /* config files DIR (PREFIX) */ -#define FB_CONFDIR "" +/* #define FB_CONFDIR "" */ /* documentation root DIR (PREFIX/doc) */ -#define FB_DOCDIR "" +/* #define FB_DOCDIR "" */ /* Alignment of double */ #define FB_DOUBLE_ALIGN 8 /* guardian lock DIR (PREFIX) */ -#define FB_GUARDDIR "" +/* #define FB_GUARDDIR "" */ /* QLI help DIR (PREFIX/help) */ -#define FB_HELPDIR "" +/* #define FB_HELPDIR "" */ /* C/C++ header files DIR (PREFIX/include) */ -#define FB_INCDIR "" +/* #define FB_INCDIR "" */ /* international DIR (PREFIX/intl) */ -#define FB_INTLDIR "" +/* #define FB_INTLDIR "" */ /* Local IPC name */ #define FB_IPC_NAME "FirebirdIPI" /* object code libraries DIR (PREFIX/lib) */ -#define FB_LIBDIR "" +/* #define FB_LIBDIR "" */ /* log files DIR (PREFIX) */ -#define FB_LOGDIR "" +/* #define FB_LOGDIR "" */ /* misc DIR (PREFIX/misc) */ -#define FB_MISCDIR "" +/* #define FB_MISCDIR "" */ /* message files DIR (PREFIX) */ -#define FB_MSGDIR "" +/* #define FB_MSGDIR "" */ /* Wnet pipe name */ #define FB_PIPE_NAME "interbas" /* plugins DIR (PREFIX) */ -#define FB_PLUGDIR "" +/* #define FB_PLUGDIR "" */ /* tzdata DIR (PREFIX) */ -#define FB_TZDATADIR "" +/* #define FB_TZDATADIR "" */ /* Installation path prefix */ -#define FB_PREFIX "/usr/local/firebird" +/* #define FB_PREFIX "/usr/local/firebird" */ /* examples database DIR (PREFIX/examples/empbuild) */ -#define FB_SAMPLEDBDIR "" +/* #define FB_SAMPLEDBDIR "" */ /* examples DIR (PREFIX/examples) */ -#define FB_SAMPLEDIR "" +/* #define FB_SAMPLEDIR "" */ /* system admin executables DIR (PREFIX/bin) */ -#define FB_SBINDIR "" +/* #define FB_SBINDIR "" */ /* security database DIR (PREFIX) */ /* #define FB_SECDBDIR "" */