Обсуждение: RPMs and symlinks (was Re: [NOVICE] C++ library probs)
Leandro Fanzone <leandro@hasar.com> writes: > --------------158FC9AA6F4DB960E871948D > I have installed the libraries from RPM > (postgresql-devel-7.0.2-2.i386.rpm). I couldn't compile a project using > the C++ library because in some config.h there's a line saying > #include "os.h" > that points to a link to a non-existent linux.h. Any ideas? I just > commented the line and worked fine so far, but I don't like it a bit. Hmm. Are you speaking of installed headers (stored in something like /usr/local/include/pgsql/) or are you looking at a full Postgres source-code tree? In the source tree, os.h is a symlink made during the configure process, but in the installed tree it ought to be a copy of the linked-to file. At least that's how it's always worked for me. I wonder whether this RPM was made with an "install" script that tries to copy symlinks as symlinks rather than copying the underlying file. If so, we need to change the install process to prevent that from happening. Lamar, Peter, any thoughts here? regards, tom lane
Leandro Fanzone <leandro@hasar.com> writes: > Installed headers on /usr/include/pgsql. Didn't installed the source. The > link actually points to .././include/port/linux.h which doesn't exist. I figured as much --- that's what the symlink should look like, in the source tree, but it ought not get installed that way. Looks like we have a bug in the RPM build process. (Fairly recent bug too, I bet, or it would've been noticed before.) I've attached a copy of 7.0.2's port/linux.h, which you can use to replace the os.h symlink so you can get some work done meanwhile. regards, tom lane /* __USE_POSIX, __USE_BSD, and __USE_BSD_SIGNAL used to be defined either here or with -D compile options, but __ macrosshould be set and used by C library macros, not Postgres code. __USE_POSIX is set by features.h, __USE_BSD is setby bsd/signal.h, and __USE_BSD_SIGNAL appears not to be used. */ #define JMP_BUF #define USE_POSIX_TIME #if defined(__i386__) typedef unsigned char slock_t; #define HAS_TEST_AND_SET #elif defined(__sparc__) typedef unsigned char slock_t; #define HAS_TEST_AND_SET #elif defined(__powerpc__) typedef unsigned int slock_t; #define HAS_TEST_AND_SET #elif defined(__alpha__) typedef long int slock_t; #define HAS_TEST_AND_SET #elif defined(__mips__) typedef unsigned int slock_t; #define HAS_TEST_AND_SET #elif defined(__arm__) typedef unsigned char slock_t #define HAS_TEST_AND_SET #endif #if defined(__GLIBC__) && (__GLIBC__ >= 2) #ifdef HAVE_INT_TIMEZONE #undef HAVE_INT_TIMEZONE #endif #endif #if defined(__powerpc__) #undef HAVE_INT_TIMEZONE #endif
Tom Lane wrote: > Hmm. Are you speaking of installed headers (stored in something like > /usr/local/include/pgsql/) or are you looking at a full Postgres > source-code tree? Installed headers on /usr/include/pgsql. Didn't installed the source. The link actually points to .././include/port/linux.h which doesn't exist. On the other hand I have some "port" directory /usr/include/pgsql (it's not the directory where the link is pointing, needless to say) but has no linux.h inside, anyway. Leandro Fanzone Compañía HASAR Buenos Aires Argentina