From 868e520da74e6c1746def4ba9c146f69898df269 Mon Sep 17 00:00:00 2001 From: Asger Ottar Alstrup Date: Sat, 22 Jan 2005 15:36:47 +0000 Subject: [PATCH] - Files for Windows MSVC compilation added git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9525 a592a061-630c-0410-9148-cb99ea01b6c8 --- development/Win32/.cvsignore | 4 + development/Win32/config.h | 596 ++ development/Win32/lyx.sln | 42 + development/Win32/lyx.vcproj | 10803 +++++++++++++++++++++++++++++++++ development/Win32/package.C | 703 +++ development/Win32/version.C | 21 + 6 files changed, 12169 insertions(+) create mode 100644 development/Win32/.cvsignore create mode 100644 development/Win32/config.h create mode 100644 development/Win32/lyx.sln create mode 100644 development/Win32/lyx.vcproj create mode 100644 development/Win32/package.C create mode 100644 development/Win32/version.C diff --git a/development/Win32/.cvsignore b/development/Win32/.cvsignore new file mode 100644 index 0000000000..995c1c4a40 --- /dev/null +++ b/development/Win32/.cvsignore @@ -0,0 +1,4 @@ +Release +Debug +lyx.ncb +lyx.suo \ No newline at end of file diff --git a/development/Win32/config.h b/development/Win32/config.h new file mode 100644 index 0000000000..ae47c02b83 --- /dev/null +++ b/development/Win32/config.h @@ -0,0 +1,596 @@ +/* src/config.h. Generated by configure. */ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + + +/* -*- C++ -*- */ +/* + * \file config.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * This is the compilation configuration file for LyX. + * It was generated by autoconfs configure. + * You might want to change some of the defaults if something goes wrong + * during the compilation. + */ + +#ifndef _CONFIG_H +#define _CONFIG_H + +#pragma warning(disable:4127 4244 4258 4355 4267 4503 4786 4800) + +// Enable a bunch of useful warnings +#pragma warning(3:4019 4032 4057 4125 4130 4152 4189 4201 4706) + +#pragma warning(2:4032) // function arg has different type from declaration +#pragma warning(2:4092) // 'sizeof' value too big +#pragma warning(2:4132 4268)// const object not initialized +#pragma warning(2:4152) // pointer conversion between function and data +#pragma warning(2:4239) // standard doesn't allow this conversion +#pragma warning(2:4701) // local variable used without being initialized +#pragma warning(2:4706) // if (a=b) instead of (if a==b) +#pragma warning(2:4709) // comma in array subscript +//#pragma warning(3:4061) // not all enum values tested in switch statement ( works in vc7, and gives alot of warnings ) +//#pragma warning(3:4505) // unreferenced local function removed +#pragma warning(3:4121) // space added for structure alignment +#pragma warning(3:4019) // empty statement at global scope +#pragma warning(3:4057) // pointers refer to different base types +#pragma warning(3:4125) // decimal digit terminates octal escape +#pragma warning(2:4131) // old-style function declarator +#pragma warning(3:4211) // extern redefined as static +#pragma warning(3:4213) // cast on left side of = is non-standard +#pragma warning(3:4222) // member function at file scope shouldn't be static +#pragma warning(3:4234 4235)// keyword not supported or reserved for future +#pragma warning(3:4504) // type ambiguous; simplify code +#pragma warning(3:4507) // explicit linkage specified after default linkage +#pragma warning(3:4515) // namespace uses itself +#pragma warning(3:4516 4517)// access declarations are deprecated +#pragma warning(3:4670) // base class of thrown object is inaccessible +#pragma warning(3:4671) // copy ctor of thrown object is inaccessible +#pragma warning(3:4673) // thrown object cannot be handled in catch block +#pragma warning(3:4674) // dtor of thrown object is inaccessible +#pragma warning(3:4705) // statement has no effect (example: a+1;) + + +/* Location of Aiksaurus.h */ +#define AIKSAURUS_H_LOCATION + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +/* #undef CRAY_STACKSEG_END */ + +/* Define if your C++ compiler puts C library functions in the global + namespace */ +/* #undef CXX_GLOBAL_CSTD */ + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define if you are building a development version of LyX */ +#define DEVEL_VERSION 1 + +/* Define if you want assertions to be enabled in the code */ +#define ENABLE_ASSERTIONS 1 + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +/* #undef ENABLE_NLS */ + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#define HAVE_ALLOCA_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ARGZ_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ASPELL_ASPELL_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ASPELL_H */ + +/* Define to 1 if you have the `asprintf' function. */ +/* #undef HAVE_ASPRINTF */ + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +/* #undef HAVE_DCGETTEXT */ + +/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_FEOF_UNLOCKED 0 + +/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FGETS_UNLOCKED 0 + +/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_GETC_UNLOCKED 0 + +/* Define if you have the prototype for function `istreambuf_iterator' */ +#define HAVE_DECL_ISTREAMBUF_ITERATOR 1 + +/* Define if you have the prototype for function `mkstemp' */ +/* #undef HAVE_DECL_MKSTEMP */ + +/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you + don't. */ +#define HAVE_DECL__SNPRINTF 1 + +/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you + don't. */ +#define HAVE_DECL__SNWPRINTF 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_DIRENT_H 1 */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_DLFCN_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_FLIMAGE_H */ + +/* Define to 1 if you have the `fwprintf' function. */ +#define HAVE_FWPRINTF 1 + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* Define to 1 if you have the `getegid' function. */ +#define HAVE_GETEGID 1 + +/* Define to 1 if you have the `geteuid' function. */ +#define HAVE_GETEUID 1 + +/* Define to 1 if you have the `getgid' function. */ +#define HAVE_GETGID 1 + +/* Define to 1 if you have the `getpagesize' function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define if the GNU gettext() function is already present or preinstalled. */ +/* #undef HAVE_GETTEXT */ + +/* Define to 1 if you have the `getuid' function. */ +#define HAVE_GETUID 1 + +/* Define if you have the iconv() function. */ +#define HAVE_ICONV 1 + +/* Define if you have the 'intmax_t' type in or . */ +#define HAVE_INTMAX_T 1 + +/* Define if exists and doesn't clash with . */ +#define HAVE_INTTYPES_H 1 + +/* Define if exists, doesn't clash with , and + declares uintmax_t. */ +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_IOS 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_ISTREAM 1 + +/* Define this if you have the kpsewhich program working on your system. */ +#define HAVE_KPSEWHICH 1 + +/* Define if you have and nl_langinfo(CODESET). */ +#define HAVE_LANGINFO_CODESET 1 + +/* Define if your file defines LC_MESSAGES. */ +/* #undef HAVE_LC_MESSAGES */ + +/* Define this if you have the AikSaurus library */ +/* #undef HAVE_LIBAIKSAURUS */ + +/* Define to 1 if you have the `c' library (-lc). */ +#define HAVE_LIBC 1 + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LOCALE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define if you have the 'long double' type. */ +#define HAVE_LONG_DOUBLE 1 + +/* Define if you have the 'long long' type. */ +#define HAVE_LONG_LONG 1 + +/* Define to 1 if you have the `lstat' function. */ +/* #undef HAVE_LSTAT */ + +/* Define to 1 if you have the header file. */ +#define HAVE_MALLOC_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mempcpy' function. */ +#define HAVE_MEMPCPY 1 + +/* Define to 1 if you have the `mkdir' function. */ +#define HAVE_MKDIR 1 + +/* Define to 1 if you have the `mkfifo' function. */ +#define HAVE_MKFIFO 1 + +/* Define to 1 if you have the `mkstemp' function. */ +/* #undef HAVE_MKSTEMP */ + +/* Define to 1 if you have the `mktemp' function. */ +#define HAVE_MKTEMP 1 + +/* Define to 1 if you have a working `mmap' system call. */ +/* #undef HAVE_MMAP */ + +/* Define to 1 if you have the `munmap' function. */ +#define HAVE_MUNMAP 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. */ +#define HAVE_NL_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_OSTREAM 1 + +/* Define if your printf() function supports format strings with positions. */ +#define HAVE_POSIX_PRINTF 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_PSPELL_PSPELL_H */ + +/* Define to 1 if you have the `putenv' function. */ +#define HAVE_PUTENV 1 + +/* Define to 1 if you have the `readlink' function. */ +/* #undef HAVE_READLINK */ + +/* Define to 1 if you have the `setenv' function. */ +/* #undef HAVE_SETENV 1 */ + +/* Define to 1 if you have the `setlocale' function. */ +#define HAVE_SETLOCALE 1 + +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SSTREAM 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDDEF_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define if exists, doesn't clash with , and declares + uintmax_t. */ +#define HAVE_STDINT_H_WITH_UINTMAX 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have a conforming std::count template, otherwise HP version + of count template is assumed. */ +#define HAVE_STD_COUNT 1 + +/* Define to 1 if you have the `stpcpy' function. */ +#define HAVE_STPCPY 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' function. */ +#define HAVE_STRERROR 1 + +/* 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 `strtoul' function. */ +#define HAVE_STRTOUL 1 + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_DIR_H */ + +/* 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. */ +/* #undef HAVE_SYS_SELECT_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. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the `tsearch' function. */ +#define HAVE_TSEARCH 1 + +/* Define if you have the 'uintmax_t' type in or . */ +#define HAVE_UINTMAX_T 1 + +/* Define to 1 if you have the header file. */ +/*#undef HAVE_UNISTD_H 1*/ + +/* Define if you have the 'unsigned long long' type. */ +#define HAVE_UNSIGNED_LONG_LONG 1 + +/* Define if you have the 'wchar_t' type. */ +#define HAVE_WCHAR_T 1 + +/* Define to 1 if you have the `wcslen' function. */ +#define HAVE_WCSLEN 1 + +/* Define if you have the 'wint_t' type. */ +#define HAVE_WINT_T 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_X11_FLIMAGE_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ZLIB_H 1 + +/* Define to 1 if you have the `_mkdir' function. */ +/* #undef HAVE__MKDIR */ + +/* Define to 1 if you have the `__argz_count' function. */ +/* #undef HAVE___ARGZ_COUNT */ + +/* Define to 1 if you have the `__argz_next' function. */ +/* #undef HAVE___ARGZ_NEXT */ + +/* Define to 1 if you have the `__argz_stringify' function. */ +/* #undef HAVE___ARGZ_STRINGIFY */ + +/* Define to 1 if you have the `__fsetlocking' function. */ +/* #undef HAVE___FSETLOCKING */ + +/* Define as const if the declaration of iconv() needs const. */ +#define ICONV_CONST + +/* Define if integer division by zero raises signal SIGFPE. */ +#define INTDIV0_RAISES_SIGFPE 1 + +/* Define to 1 if `major', `minor', and `makedev' are declared in . + */ +/* #undef MAJOR_IN_MKDEV */ + +/* Define to 1 if `major', `minor', and `makedev' are declared in + . */ +/* #undef MAJOR_IN_SYSMACROS */ + +/* Define if mkdir takes only one argument. */ +/* #undef MKDIR_TAKES_ONE_ARG */ + +/* Define if you have modern standard-compliant STL streams */ +#define MODERN_STL_STREAMS 1 + +/* Name of package */ +#define PACKAGE "lyx-1.4.0cvs" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "lyx-devel@lists.lyx.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "lyx" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "lyx 1.4.0cvs" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "lyx" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.4.0cvs" + +/* Define if exists and defines unusable PRI* macros. */ +/* #undef PRI_MACROS_BROKEN */ + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE void + +/* Define to the type of arg 1 for `select'. */ +#define SELECT_TYPE_ARG1 int + +/* Define to the type of args 2, 3 and 4 for `select'. */ +#define SELECT_TYPE_ARG234 (fd_set *) + +/* Define to the type of arg 5 for `select'. */ +#define SELECT_TYPE_ARG5 (struct timeval *) + +/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +/* #undef SIZE_MAX */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if the `S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define to 1 if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* Define as 1 to use the aspell library */ +/* #undef USE_ASPELL */ + +/* Define as 1 if you want to support compressed files. */ +/* #undef USE_COMRESSION */ + +/* Define if you want to be able to load jpeg images natively */ +#define USE_JPEG_IMAGE_LOADER 1 + +/* Define to 1 if LyX should use a MacOS X application bundle file layout */ +/* #undef USE_MACOSX_PACKAGING */ + +/* Define to 1 if LyX should use a POSIX-style file layout */ +/* #undef USE_POSIX_PACKAGING */ + +/* Define as 1 to use the pspell library */ +/* #undef USE_PSPELL */ + +/* Define to 1 if LyX should use a Windows-style file layout */ +#define USE_WINDOWS_PACKAGING 1 + +/* Version number of package */ +#define VERSION "1.4.0cvs" + +/* Define this if you want to see the warning directives put here and there by + the developpers to get attention */ +/* #undef WITH_WARNINGS */ + +/* Define to 1 if the X Window System is missing or not being used. */ +/* #undef X_DISPLAY_MISSING */ + +/* Define to 1 if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* # undef _ALL_SOURCE */ +#endif + +/* libstdc++ concept checking */ +/* #undef _GLIBCPP_CONCEPT_CHECKS */ + +/* libstdc++ concept checking */ +/* #undef _GLIBCXX_CONCEPT_CHECKS */ + +/* libstdc++ debug mode */ +/* #undef _GLIBCXX_DEBUG */ + +/* libstdc++ pedantic debug mode */ +/* #undef _GLIBCXX_DEBUG_PEDANTIC */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to nothing if your compiler does not understand the 'explicit' + directive */ +/* #undef explicit */ + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to `int' if does not define. */ +/* #undef mode_t */ + +/* Define to `long' if does not define. */ +/* #undef off_t */ + +/* Define to `int' if does not define. */ +/* #undef pid_t */ + +/* Define as the type of the result of subtracting two pointers, if the system + doesn't define it. */ +/* #undef ptrdiff_t */ + +/* Define to empty if the C compiler doesn't support this keyword. */ +/* #undef signed */ + +/* Define to `unsigned' if does not define. */ +/* #undef size_t */ + +/* Define to `int' if doesn't define. */ +/* #undef uid_t */ + +/* Define to unsigned long or unsigned long long if and + don't define. */ +/* #undef uintmax_t */ + + +/************************************************************ + ** You should not need to change anything beyond this point */ + +#ifndef HAVE_STRERROR +#if defined(__cplusplus) +extern "C" +#endif +char * strerror(int n); +#endif + +#ifdef HAVE_MKSTEMP +#ifndef HAVE_DECL_MKSTEMP +#if defined(__cplusplus) +extern "C" +#endif +int mkstemp(char*); +#endif +#endif + +#ifdef __EMX__ +#include "support/os2_defines.h" +#endif + +#if defined(HAVE_OSTREAM) && defined(HAVE_LOCALE) && defined(HAVE_SSTREAM) +#define USE_BOOST_FORMAT 1 +#else +#define USE_BOOST_FORMAT 0 +#endif + +#define BOOST_USER_CONFIG + +#if defined(ENABLE_ASSERTIONS) +#define BOOST_ENABLE_ASSERT_HANDLER 1 +#else +#define BOOST_DISABLE_ASSERTS 1 +#endif + +#define BOOST_DISABLE_THREADS 1 +#define BOOST_NO_WREGEX 1 +#define BOOST_NO_WSTRING 1 + +#endif + diff --git a/development/Win32/lyx.sln b/development/Win32/lyx.sln new file mode 100644 index 0000000000..df4390a36c --- /dev/null +++ b/development/Win32/lyx.sln @@ -0,0 +1,42 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lyx", "lyx.vcproj", "{967779B1-EB60-49DD-BDA7-8F4C15790778}" + ProjectSection(ProjectDependencies) = postProject + {FDBBC827-4BD2-4E7D-B050-0967A0B6C754} = {FDBBC827-4BD2-4E7D-B050-0967A0B6C754} + {3BF0EC29-8B64-460F-AE0A-96794D38088D} = {3BF0EC29-8B64-460F-AE0A-96794D38088D} + {3BF0EC29-8B64-460F-AE0A-96794D38088D} = {3BF0EC29-8B64-460F-AE0A-96794D38088D} + {3BF0EC29-8B64-460F-AE0A-96794D38088D} = {3BF0EC29-8B64-460F-AE0A-96794D38088D} + {3BF0EC29-8B64-460F-AE0A-96794D38088D} = {3BF0EC29-8B64-460F-AE0A-96794D38088D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libboost_regex", "..\..\boost\libs\regex\regex.vcproj", "{FDBBC827-4BD2-4E7D-B050-0967A0B6C754}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libboost_signals", "..\..\boost\libs\signals\signals.vcproj", "{3BF0EC29-8B64-460F-AE0A-96794D38088D}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {967779B1-EB60-49DD-BDA7-8F4C15790778}.Debug.ActiveCfg = Debug|Win32 + {967779B1-EB60-49DD-BDA7-8F4C15790778}.Debug.Build.0 = Debug|Win32 + {967779B1-EB60-49DD-BDA7-8F4C15790778}.Release.ActiveCfg = Release|Win32 + {967779B1-EB60-49DD-BDA7-8F4C15790778}.Release.Build.0 = Release|Win32 + {FDBBC827-4BD2-4E7D-B050-0967A0B6C754}.Debug.ActiveCfg = Debug|Win32 + {FDBBC827-4BD2-4E7D-B050-0967A0B6C754}.Debug.Build.0 = Debug|Win32 + {FDBBC827-4BD2-4E7D-B050-0967A0B6C754}.Release.ActiveCfg = Release|Win32 + {FDBBC827-4BD2-4E7D-B050-0967A0B6C754}.Release.Build.0 = Release|Win32 + {3BF0EC29-8B64-460F-AE0A-96794D38088D}.Debug.ActiveCfg = Debug|Win32 + {3BF0EC29-8B64-460F-AE0A-96794D38088D}.Debug.Build.0 = Debug|Win32 + {3BF0EC29-8B64-460F-AE0A-96794D38088D}.Release.ActiveCfg = Release|Win32 + {3BF0EC29-8B64-460F-AE0A-96794D38088D}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/development/Win32/lyx.vcproj b/development/Win32/lyx.vcproj new file mode 100644 index 0000000000..4a027248f3 --- /dev/null +++ b/development/Win32/lyx.vcproj @@ -0,0 +1,10803 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/development/Win32/package.C b/development/Win32/package.C new file mode 100644 index 0000000000..7733bff006 --- /dev/null +++ b/development/Win32/package.C @@ -0,0 +1,703 @@ +// -*- C++ -*- +/** + * \file package.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Angus Leeming + * + * Full author contact details are available in file CREDITS. + * + * Warning! This file is autogenerated from package.C.in. + * All changes to this file will be lost. + */ + +#include + +#include "support/package.h" + +#include "debug.h" +#include "gettext.h" + +#include "support/FileInfo.h" +#include "support/filetools.h" +#include "support/lstrings.h" +#include "support/os.h" + +#include +#include + +#include +#include + +#if !defined (USE_WINDOWS_PACKAGING) && \ + !defined (USE_MACOSX_PACKAGING) && \ + !defined (USE_POSIX_PACKAGING) +#error USE_FOO_PACKAGING must be defined for FOO = WINDOWS, MACOSX or POSIX. +#endif + +#if defined (USE_WINDOWS_PACKAGING) +# include +# include // SHGetFolderPath + + // Needed for MinGW: +# ifndef SHGFP_TYPE_CURRENT +# define SHGFP_TYPE_CURRENT 0 +# endif + +#elif defined (USE_MACOSX_PACKAGING) +# include // FSFindFolder, FSRefMakePath +#endif + +using std::string; + + +namespace lyx { +namespace support { + +namespace { + +Package package_; +bool initialised_ = false; + +} // namespace anon + + +void init_package(string const & command_line_arg0, + string const & command_line_system_support_dir, + string const & command_line_user_support_dir) +{ + // Can do so only once. + if (initialised_) + return; + + package_ = Package(command_line_arg0, + command_line_system_support_dir, + command_line_user_support_dir); + initialised_ = true; +} + + +Package const & package() +{ + // Commented out because package().locale_dir() can be called + // from the message translation code in messages.C before + // init_package() is called. Lars is on the case... + // BOOST_ASSERT(initialised_); + return package_; +} + + +namespace { + +string const abs_path_from_binary_name(string const & exe); + +std::pair const get_build_dirs(string const & abs_binary); + +string const get_document_dir(string const & home_dir); + +string const get_home_dir(); + +string const get_locale_dir(string const & system_support_dir); + +string const get_system_support_dir(string const & abs_binary, + string const & command_line_system_support_dir); + +string const get_temp_dir(); + +string const get_default_user_support_dir(string const & home_dir); + +std::pair const +get_user_support_dir(string const & default_user_support_dir, + string const & command_line_user_support_dir); + +} // namespace anon + + +Package::Package(string const & command_line_arg0, + string const & command_line_system_support_dir, + string const & command_line_user_support_dir) + : explicit_user_support_dir_(false) +{ + home_dir_ = get_home_dir(); + temp_dir_ = get_temp_dir(); + document_dir_ = get_document_dir(home_dir_); + + string const abs_binary = abs_path_from_binary_name(command_line_arg0); + binary_dir_ = OnlyPath(abs_binary); + + // Is LyX being run in-place from the build tree? + boost::tie(build_support_dir_, system_support_dir_) = + get_build_dirs(abs_binary); + + if (build_support_dir_.empty()) + system_support_dir_ = + get_system_support_dir(abs_binary, + command_line_system_support_dir); + + locale_dir_ = get_locale_dir(system_support_dir_); + + string const default_user_support_dir = + get_default_user_support_dir(home_dir_); + boost::tie(user_support_dir_, explicit_user_support_dir_) = + get_user_support_dir(default_user_support_dir, + command_line_user_support_dir); + + lyxerr[Debug::INIT] + << "\n" + << "\tbinary_dir " << binary_dir() << '\n' + << "\tsystem_support " << system_support() << '\n' + << "\tbuild_support " << build_support() << '\n' + << "\tuser_support " << user_support() << '\n' + << "\tlocale_dir " << locale_dir() << '\n' + << "\tdocument_dir " << document_dir() << '\n' + << "\ttemp_dir " << temp_dir() << '\n' + << "\thome_dir " << home_dir() << '\n' + << "\n" << std::endl; +} + + +namespace { + +// These next three functions contain the stuff that is substituted at +// configuration-time. +string const top_srcdir() +{ + static string const dir("c:\\lyx\\lyx-devel"); + return dir; +} + + +string const hardcoded_localedir() +{ + return string("c:\\lyx\\lyx-devel\\share\\locale"); +} + + +string const hardcoded_system_support_dir() +{ + return string("c:\\lyx\\lyx-devel\\share"); +} + +} // namespace anon + + +string const & Package::top_srcdir() const +{ + static string const dir("c:\\lyx\\lyx-devel"); + return dir; +} + + +namespace { + +bool check_command_line_dir(string const & dir, + string const & file, + string const & command_line_switch); + +string const extract_env_var_dir(string const & env_var); + +bool check_env_var_dir(string const & dir, + string const & env_var); + +bool check_env_var_dir(string const & dir, + string const & file, + string const & env_var); + +string const relative_locale_dir(); + +string const relative_system_support_dir(); + + +#if defined (USE_WINDOWS_PACKAGING) +// Given a folder ID, returns the folder name (in unix-style format). +// Eg CSIDL_PERSONAL -> "C:/Documents and Settings/USERNAME/My Documents" +string const win32_folder_path(int folder_id) +{ + char folder_path[MAX_PATH + 1]; + if (SUCCEEDED(SHGetFolderPath(0, folder_id, 0, + SHGFP_TYPE_CURRENT, folder_path))) + return os::internal_path(folder_path); + return string(); +} +#endif + + +std::pair const get_build_dirs(string const & abs_binary) +{ + string const check_text = "Checking whether LyX is run in place..."; + + // We're looking for "lyxrc.defaults" in a directory + // binary_dir/../lib + // We're also looking for "chkconfig.ltx" in a directory + // binary_dir/top_srcdir()/lib + // If both are found, then we're running LyX in-place. + + // Note that the name of the lyx binary may be a symbolic link. + // If that is the case, then we follow the links too. + string binary = abs_binary; + while (true) { + // Try and find "lyxrc.defaults". + string const binary_dir = OnlyPath(binary); + string const build_support_dir = + NormalizePath(AddPath(binary_dir, "../lib")); + + if (!FileSearch(build_support_dir, "lyxrc.defaults").empty()) { + // Try and find "chkconfig.ltx". + string const system_support_dir = + MakeAbsPath(AddPath(top_srcdir(), "lib"), + AddPath(binary_dir, "support")); + + if (!FileSearch(system_support_dir, "chkconfig.ltx").empty()) { + lyxerr[Debug::INIT] << check_text << " yes" + << std::endl; + return std::make_pair(build_support_dir, system_support_dir); + } + } + + // Check whether binary is a symbolic link. + // If so, resolve it and repeat the exercise. + FileInfo const file(binary, true); + if (!file.isOK() || !file.isLink()) + break; + + string link; + if (LyXReadLink(binary, link, true)) { + binary = link; + } else { + // Unable to resolve the link. + break; + } + } + + lyxerr[Debug::INIT] << check_text << " no" << std::endl; + return std::make_pair(string(), string()); +} + + +// Specification of document_dir_ may be reset by LyXRC, +// but the default is fixed for a given OS. +string const get_document_dir(string const & home_dir) +{ +#if defined (USE_WINDOWS_PACKAGING) + (void)home_dir; // Silence warning about unused variable. + return win32_folder_path(CSIDL_PERSONAL); +#else // Posix-like. + return home_dir; +#endif +} + + +// The specification of home_dir_ is fixed for a given OS. +// A typical example on Windows: "C:/Documents and Settings/USERNAME" +// and on a Posix-like machine: "/home/USERNAME". +string const get_home_dir() +{ +#if defined (USE_WINDOWS_PACKAGING) + string const home_dir = GetEnv("USERPROFILE"); +#else // Posix-like. + string const home_dir = GetEnv("HOME"); +#endif + + return os::internal_path(home_dir); +} + + +// Several sources are probed to ascertain the locale directory. +// The only requirement is that the result is indeed a directory. +string const get_locale_dir(string const & system_support_dir) +{ + // 1. Use the "LYX_LOCALEDIR" environment variable. + string path = extract_env_var_dir("LYX_LOCALEDIR"); + if (!path.empty() && check_env_var_dir(path, "LYX_LOCALEDIR")) + return path; + + // 2. Search for system_support_dir / + // The is OS-dependent. (On Unix, it will + // be "../locale/".) + path = NormalizePath(AddPath(system_support_dir, relative_locale_dir())); + + FileInfo fi(path); + if (fi.isOK() && fi.isDir()) + return path; + + // 3. Fall back to the hard-coded LOCALEDIR. + path = hardcoded_localedir(); + FileInfo fi2(path); + if (fi2.isOK() && fi2.isDir()) + return path; + + return string(); +} + + +// Specification of temp_dir_ may be reset by LyXRC, +// but the default is fixed for a given OS. +string const get_temp_dir() +{ +#if defined (USE_WINDOWS_PACKAGING) + // Typical example: C:/TEMP/. + char path[MAX_PATH + 1]; + GetTempPath(MAX_PATH, path); + return os::internal_path(path); +#else // Posix-like. + return "/tmp"; +#endif +} + + +// If we use a 'lazy' lyxerr in the hope of setting the locale before +// printing any messages, then we should ensure that it is flushed first. +void bail_out() +{ +#ifndef CXX_GLOBAL_CSTD + using std::exit; +#endif + exit(1); +} + + +// Extracts the absolute path from the foo of "-sysdir foo" or "-userdir foo" +string const abs_path_from_command_line(string const & command_line) +{ + if (command_line.empty()) + return string(); + + string const path = os::internal_path(command_line); + return os::is_absolute_path(path) ? path : MakeAbsPath(path); +} + + +// Does the grunt work for abs_path_from_binary_name() +string const get_binary_path(string const & exe) +{ + string const exe_path = os::internal_path(exe); + if (os::is_absolute_path(exe_path)) + return exe_path; + + // Two possibilities present themselves. + // 1. The binary is relative to the CWD. + string const abs_exe_path = MakeAbsPath(exe_path); + if (FileInfo(abs_exe_path, true).isOK()) + return abs_exe_path; + + // 2. exe must be the name of the binary only and it + // can be found on the PATH. + string const exe_name = OnlyFilename(exe_path); + if (exe_name != exe_path) + return string(); + + std::vector const path = getEnvPath("PATH"); + std::vector::const_iterator it = path.begin(); + std::vector::const_iterator const end = path.end(); + for (; it != end; ++it) { + // This will do nothing if *it is already absolute. + string const exe_dir = MakeAbsPath(*it); + + string const exe_path = AddName(exe_dir, exe_name); + if (FileInfo(exe_path, true).isOK()) + return exe_path; + } + + // Didn't find anything. + return string(); +} + + +// Extracts the absolute path to the binary name received as argv[0]. +string const abs_path_from_binary_name(string const & exe) +{ + string const abs_binary = get_binary_path(exe); + if (abs_binary.empty()) { + lyxerr << bformat(_("Unable to determine the path to the " + "LyX binary from the command line %1$s"), + exe) + << std::endl; + bail_out(); + } + return abs_binary; +} + + +// A plethora of directories is searched to ascertain the system +// lyxdir which is defined as the first directory to contain +// "chkconfig.ltx". +string const +get_system_support_dir(string const & abs_binary, + string const & command_line_system_support_dir) +{ + string const chkconfig_ltx = "chkconfig.ltx"; + + // searched_dirs is used for diagnostic purposes only in the case + // that "chkconfig.ltx" is not found. + std::list searched_dirs; + + // 1. Use the -sysdir command line parameter. + string path = abs_path_from_command_line(command_line_system_support_dir); + if (!path.empty()) { + searched_dirs.push_back(path); + if (check_command_line_dir(path, chkconfig_ltx, "-sysdir")) + return path; + } + + // 2. Use the "LYX_DIR_13x" environment variable. + path = extract_env_var_dir("LYX_DIR_13x"); + if (!path.empty()) { + searched_dirs.push_back(path); + if (check_env_var_dir(path, chkconfig_ltx, "LYX_DIR_13x")) + return path; + } + + // 3. Search relative to the lyx binary. + // We're looking for "chkconfig.ltx" in a directory + // OnlyPath(abs_binary) / / PACKAGE / + // PACKAGE is hardcoded in config.h. Eg "lyx" or "lyx-1.3.6cvs". + // is OS-dependent; on Unix, it will be "../share/". + string const relative_lyxdir = relative_system_support_dir(); + + // One subtlety to be aware of. The name of the lyx binary may be + // a symbolic link. If that is the case, then we follow the links too. + string binary = abs_binary; + while (true) { + // Try and find "chkconfig.ltx". + string const binary_dir = OnlyPath(binary); + + string const lyxdir = + NormalizePath(AddPath(binary_dir, relative_lyxdir)); + searched_dirs.push_back(lyxdir); + + if (!FileSearch(lyxdir, chkconfig_ltx).empty()) { + // Success! "chkconfig.ltx" has been found. + return lyxdir; + } + + // Check whether binary is a symbolic link. + // If so, resolve it and repeat the exercise. + FileInfo const file(binary, true); + if (!file.isOK() || !file.isLink()) + break; + + string link; + if (LyXReadLink(binary, link, true)) { + binary = link; + } else { + // Unable to resolve the link. + break; + } + } + + // 4. Repeat the exercise on the directory itself. + string binary_dir = OnlyPath(abs_binary); + while (true) { + // This time test whether the directory is a symbolic link + // *before* looking for "chkconfig.ltx". + // (We've looked relative to the original already.) + FileInfo const file(binary_dir, true); + if (!file.isOK() || !file.isLink()) + break; + + string link; + if (LyXReadLink(binary_dir, link, true)) { + binary_dir = link; + } else { + // Unable to resolve the link. + break; + } + + // Try and find "chkconfig.ltx". + string const lyxdir = + NormalizePath(AddPath(binary_dir, relative_lyxdir)); + searched_dirs.push_back(lyxdir); + + if (!FileSearch(lyxdir, chkconfig_ltx).empty()) { + // Success! "chkconfig.ltx" has been found. + return lyxdir; + } + } + + // 5. In desparation, try the hard-coded system support dir. + path = hardcoded_system_support_dir(); + if (!FileSearch(path, chkconfig_ltx).empty()) + return path; + + // Everything has failed :-( + // So inform the user and exit. + string searched_dirs_str; + typedef std::list::const_iterator iterator; + iterator const begin = searched_dirs.begin(); + iterator const end = searched_dirs.end(); + for (iterator it = begin; it != end; ++it) { + if (it != begin) + searched_dirs_str += "\n\t"; + searched_dirs_str += *it; + } + + lyxerr << bformat(_("Unable to determine the system directory " + "having searched\n" + "\t%1$s\n" + "Try the '-sysdir' command line parameter or " + "set the environment variable LYX_DIR_13x to " + "the LyX system directory containing the file " + "`chkconfig.ltx'."), + searched_dirs_str) + << std::endl; + + bail_out(); + // Keep the compiler happy. + return string(); +} + + +// Returns the absolute path to the user lyxdir, together with a flag +// indicating whether this directory was specified explicitly (as -userdir +// or through an environment variable) or whether it was deduced. +std::pair const +get_user_support_dir(string const & default_user_support_dir, + string const & command_line_user_support_dir) +{ + bool explicit_userdir = true; + + // 1. Use the -userdir command line parameter. + string path = + abs_path_from_command_line(command_line_user_support_dir); + if (!path.empty()) + return std::make_pair(path, explicit_userdir); + + // 2. Use the LYX_USERDIR_13x environment variable. + path = extract_env_var_dir("LYX_USERDIR_13x"); + if (!path.empty()) + return std::make_pair(path, explicit_userdir); + + // 3. Use the OS-dependent default_user_support_dir + explicit_userdir = false; + return std::make_pair(default_user_support_dir, explicit_userdir); +} + + +// $HOME/.lyx on all platforms but Win32 where it will be something like +// "C:/Documents and Settings/USERNAME/Application Data/lyx" +string const get_default_user_support_dir(string const & home_dir) +{ +#if defined (USE_WINDOWS_PACKAGING) + (void)home_dir; // Silence warning about unused variable. + + return AddPath(win32_folder_path(CSIDL_APPDATA), PACKAGE); + +#elif defined (USE_MACOSX_PACKAGING) + (void)home_dir; // Silence warning about unused variable. + + FSRef fsref; + OSErr const error_code = + FSFindFolder(kUserDomain, kApplicationSupportFolderType, + kDontCreateFolder, &fsref); + if (error_code != 0) + return string(); + + char store[PATH_MAX + 1]; + OSStatus const status_code = + FSRefMakePath(&fsref, + reinterpret_cast(store), PATH_MAX); + if (status_code != 0) + return string(); + + return AddPath(reinterpret_cast(store), PACKAGE); + +#else // USE_POSIX_PACKAGING + return AddPath(home_dir, string(".") + PACKAGE); +#endif +} + + +// Check that directory @c dir contains @c file. +// Else emit a warning about an invalid @c command_line_switch. +bool check_command_line_dir(string const & dir, + string const & file, + string const & command_line_switch) +{ + string const abs_path = FileSearch(dir, file); + if (abs_path.empty()) { + lyxerr << bformat(_("Invalid %1$s switch.\n" + "Directory %2$s does not contain %3$s."), + command_line_switch, dir, file) + << std::endl; + } + + return !abs_path.empty(); +} + + +// The environment variable @c env_var expands to a (single) file path. +string const extract_env_var_dir(string const & env_var) +{ + string const dir = os::internal_path(GetEnv(env_var)); + return dir.empty() ? dir : MakeAbsPath(dir); +} + + +// Check that directory @c dir contains @c file. +// Else emit a warning about an invalid @c env_var. +bool check_env_var_dir(string const & dir, + string const & file, + string const & env_var) +{ + string const abs_path = FileSearch(dir, file); + if (abs_path.empty()) { + lyxerr << bformat(_("Invalid %1$s environment variable.\n" + "Directory %2$s does not contain %3$s."), + env_var, dir, file) + << std::endl; + } + + return !abs_path.empty(); +} + + +// Check that directory @c dir is indeed a directory. +// Else emit a warning about an invalid @c env_var. +bool check_env_var_dir(string const & dir, + string const & env_var) +{ + FileInfo fi(dir); + bool const success = (fi.isOK() && fi.isDir()); + + if (!success) { + // Put this string on a single line so that the gettext + // search mechanism in po/Makefile.in.in will register + // package.C.in as a file containing strings that need + // translation. + string const fmt = + _("Invalid %1$s environment variable.\n%2$s is not a directory."); + + lyxerr << bformat(fmt, env_var, dir) + << std::endl; + } + + return success; +} + + +// The locale directory relative to the LyX system directory. +string const relative_locale_dir() +{ + return "../locale/"; +} + + +// The system lyxdir is relative to the directory containing the LyX binary. +string const relative_system_support_dir() +{ + string result; + +#if defined (USE_WINDOWS_PACKAGING) || defined (USE_MACOSX_PACKAGING) + result = AddPath("../Resources/", PACKAGE); +#else // Posix-like. + result = AddPath("../share/", PACKAGE); +#endif + + return result; +} + +} // namespace anon + +} // namespace support +} // namespace lyx diff --git a/development/Win32/version.C b/development/Win32/version.C new file mode 100644 index 0000000000..494ca2c2fd --- /dev/null +++ b/development/Win32/version.C @@ -0,0 +1,21 @@ +/* -*- C++ -*- */ +/** + * \file version.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Jean-Marc Lasgouttes + * + * Full author contact details are available in file CREDITS. + * + * Warning! This file is autogenerated from version.C.in. + * All changes to this file will be lost. + */ + +/// +char const * lyx_version = "1.4.0cvs"; +/// +char const * lyx_release_date = "Thu, Jan 30, 2003"; + +/// This is the version information shown by 'lyx -version' +char const * lyx_version_info = "@VERSION_INFO@"; -- 2.39.2