Re: [HTCondor-devel] library flag generation in the cmake files


Date: Sun, 24 Mar 2013 18:33:36 -0500
From: Erik Paulson <epaulson@xxxxxxxxxxxx>
Subject: Re: [HTCondor-devel] library flag generation in the cmake files
Let's try this again, without hitting send while trying to flip through tabs.

I'm trying to build HTCondor on a Linux machine without the pcre-devel RPM installed. On Linux, this is a problem because HTCondor assumes the system pcre is to be used, not the external. 

I'm building HTCondor with this:
./configure_uw -DWITH_GLOBUS:BOOL=FALSE -DHAVE_BOINC:BOOL=FALSE -DWITH_VOMS:BOOL=FALSE -DWANT_GLEXEC:BOOL=FALSE -DWITH_POSTGRESQL:BOOL=FALSE -DCLIPPED:BOOL=ON

To build PCRE, I just changed the 'NOT LINUX' git in CMakeLists.txt:

diff --git a/externals/bundles/pcre/7.6/CMakeLists.txt b/externals/bundles/pcre/7.6/CMakeLists.txt
index 741956d..6e7dcf7 100644
--- a/externals/bundles/pcre/7.6/CMakeLists.txt
+++ b/externals/bundles/pcre/7.6/CMakeLists.txt
@@ -16,7 +16,7 @@
  # 
  ############################################################### 
 
-if ( NOT PROPER AND NOT LINUX )
+if ( NOT PROPER )
 
        condor_pre_external( PCRE pcre-7.6 "lib;include" "include/pcre.h")
 
@@ -96,7 +96,7 @@ else( NOT PROPER AND NOT LINUX )
             find_multiple( "pcre" PCRE_FOUND )
         endif()
 
-endif( NOT PROPER AND NOT LINUX )
+endif( NOT PROPER )

What next tripped me up was this

make[2]: Entering directory `/home/epaulson/development/htcondor'
Linking CXX shared library ../../bld_external/classads-7.9.6/install/lib/libclassad.so
cd /home/epaulson/development/htcondor/src/classad && /home/epaulson/development/tools/bin/cmake -E cmake_link_script CMakeFiles/classad.dir/link.txt --verbose=1
/usr/bin/c++  -fPIC -g   -shared -Wl,-soname,libclassad.so.5 -o ../../bld_external/classads-7.9.6/install/lib/libclassad.so.7.9.6 CMakeFiles/classad.dir/attrrefs.cpp.o CMakeFiles/classad.dir/classad.cpp.o CMakeFiles/classad.dir/classadCache.cpp.o CMakeFiles/classad.dir/collection.cpp.o CMakeFiles/classad.dir/collectionBase.cpp.o CMakeFiles/classad.dir/debug.cpp.o CMakeFiles/classad.dir/exprList.cpp.o CMakeFiles/classad.dir/exprTree.cpp.o CMakeFiles/classad.dir/fnCall.cpp.o CMakeFiles/classad.dir/indexfile.cpp.o CMakeFiles/classad.dir/lexer.cpp.o CMakeFiles/classad.dir/lexerSource.cpp.o CMakeFiles/classad.dir/literals.cpp.o CMakeFiles/classad.dir/matchClassad.cpp.o CMakeFiles/classad.dir/operators.cpp.o CMakeFiles/classad.dir/query.cpp.o CMakeFiles/classad.dir/sink.cpp.o CMakeFiles/classad.dir/source.cpp.o CMakeFiles/classad.dir/transaction.cpp.o CMakeFiles/classad.dir/util.cpp.o CMakeFiles/classad.dir/value.cpp.o CMakeFiles/classad.dir/view.cpp.o CMakeFiles/classad.dir/xmlLexer.cpp.o CMakeFiles/classad.dir/xmlSink.cpp.o CMakeFiles/classad.dir/xmlSource.cpp.o CMakeFiles/classad.dir/cclassad.cpp.o CMakeFiles/classad.dir/common.cpp.o -Wl,--start-group ../../bld_external/pcre-7.6/install/lib/libpcre.a -ldl -Wl,--end-group -Wl,--enable-new-dtags -Wl,-rpath,"\$ORIGIN/../lib:/lib64:/usr/lib64:\$ORIGIN/../lib/condor" 
/usr/bin/ld: ../../bld_external/pcre-7.6/install/lib/libpcre.a(pcre_compile.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../../bld_external/pcre-7.6/install/lib/libpcre.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [bld_external/classads-7.9.6/install/lib/libclassad.so.7.9.6] Error 1
make[2]: Leaving directory `/home/epaulson/development/htcondor'
make[1]: *** [src/classad/CMakeFiles/classad.dir/all] Error 2
make[1]: Leaving directory `/home/epaulson/development/htcondor'
make: *** [all] Error 2
[epaulson@submit-1 htcondor]$

So this is my question - how did 
src/classad/CMakeFiles/classad.dir/link.txt 

decide to link with libpcre.a and not libpcre.so?

I just edited link.txt to use the .so and got through classads - but that's clearly the wrong thing, and sure enough, the blahp fails to build - I'll bet that if I track down the full error message from configure here, it's a linking problem:

./configure: line 19740: GLITE_CHECK_LIBDIR: command not found
./configure: line 19741: GLITE_CHECK_INITDIR: command not found
checking for CLASSAD installation... prefix: /home/epaulson/development/htcondor/bld_external/classads-7.9.6/install
checking if a small classads program compiles... no
configure: WARNING:
   ***  Cannot compile a small classads program: check whether the
   ***  Condor ClassADs library is installed
configure: error: "CLASSADS not found"
make[2]: *** [externals/bundles/blahp/1.16.5.1/blahp-prefix/src/blahp-stamp/blahp-configure] Error 1
make[2]: Leaving directory `/home/epaulson/development/htcondor'
make[1]: *** [externals/bundles/blahp/1.16.5.1/CMakeFiles/blahp.dir/all] Error 2
make[1]: Leaving directory `/home/epaulson/development/htcondor'
make: *** [all] Error 2

(though there's a scary line earlier about "project/classads.m4:9: warning: underquoted definition of AC_CLASSADS" that might also be my more immediate problem)

regardless, I probably shouldn't be editing link.txt at the earlier step - but I've been hunting, and I can't find what rule decided to use the .a instead of the .so

Thanks!

-Erik, still rather CMake-challenged. 

ps the externals stuff is so different, compared to how the rest of the world does it, that it really should be better documented in README.building

[← Prev in Thread] Current Thread [Next in Thread→]