From 5720e1f634b0253013b1887a924492f3dd29f012 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 12 Dec 2011 16:37:12 -0500 Subject: [PATCH] HP: Drive shared library linking with compiler front end Previously we linked C, Fortran, and ASM shared libraries compiled with the HP compiler using a direct invocation of the linker (ld). This behavior was left historically from support for an ancient HP C compiler that did not know how to create shared libraries. Fortran shared libraries need to be linked with the compiler to get the language runtime library dependencies as is already done for C++. Update the HP-UX-HP* platform information to use the compiler front end when linking shared libraries. This works on modern HP tools and produces correct behavior. If there is a need to support older tools again we can add a special case for them. --- Modules/Platform/HP-UX-HP-ASM.cmake | 4 ---- Modules/Platform/HP-UX-HP-C.cmake | 5 ----- Modules/Platform/HP-UX-HP-CXX.cmake | 2 -- Modules/Platform/HP-UX-HP-Fortran.cmake | 5 ----- Modules/Platform/HP-UX-HP.cmake | 10 +++------- 5 files changed, 3 insertions(+), 23 deletions(-) diff --git a/Modules/Platform/HP-UX-HP-ASM.cmake b/Modules/Platform/HP-UX-HP-ASM.cmake index 0a85905eb..05c69e41b 100644 --- a/Modules/Platform/HP-UX-HP-ASM.cmake +++ b/Modules/Platform/HP-UX-HP-ASM.cmake @@ -1,6 +1,2 @@ include(Platform/HP-UX-HP) __hpux_compiler_hp(ASM) - -set(CMAKE_SHARED_LIBRARY_CREATE_ASM_FLAGS "-E -b +nodefaultrpath -L/usr/lib") - -set(CMAKE_ASM_CREATE_SHARED_LIBRARY "ld -o ") diff --git a/Modules/Platform/HP-UX-HP-C.cmake b/Modules/Platform/HP-UX-HP-C.cmake index d83e01b26..100093590 100644 --- a/Modules/Platform/HP-UX-HP-C.cmake +++ b/Modules/Platform/HP-UX-HP-C.cmake @@ -1,11 +1,6 @@ include(Platform/HP-UX-HP) __hpux_compiler_hp(C) -set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-E -b +nodefaultrpath -L/usr/lib") - set(CMAKE_C_CREATE_PREPROCESSED_SOURCE " -E > ") set(CMAKE_C_CREATE_ASSEMBLY_SOURCE " -S -o ") set(CMAKE_C_COMPILE_OBJECT " -Aa -Ae -o -c ") - -# use ld directly to create shared libraries for hp cc -set(CMAKE_C_CREATE_SHARED_LIBRARY "ld -o ") diff --git a/Modules/Platform/HP-UX-HP-CXX.cmake b/Modules/Platform/HP-UX-HP-CXX.cmake index 8f3c70c3e..dfa1e4e45 100644 --- a/Modules/Platform/HP-UX-HP-CXX.cmake +++ b/Modules/Platform/HP-UX-HP-CXX.cmake @@ -1,8 +1,6 @@ include(Platform/HP-UX-HP) __hpux_compiler_hp(CXX) -set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "+Z -Wl,-E,+nodefaultrpath -b -L/usr/lib") - set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE " -E > ") set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE " -S " diff --git a/Modules/Platform/HP-UX-HP-Fortran.cmake b/Modules/Platform/HP-UX-HP-Fortran.cmake index 5a3ab199c..30acab807 100644 --- a/Modules/Platform/HP-UX-HP-Fortran.cmake +++ b/Modules/Platform/HP-UX-HP-Fortran.cmake @@ -1,7 +1,2 @@ include(Platform/HP-UX-HP) __hpux_compiler_hp(Fortran) - -set(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS "-E -b -L/usr/lib") - -set(CMAKE_Fortran_CREATE_SHARED_LIBRARY - "ld -o ") diff --git a/Modules/Platform/HP-UX-HP.cmake b/Modules/Platform/HP-UX-HP.cmake index 5e70d3175..bce0a8bce 100644 --- a/Modules/Platform/HP-UX-HP.cmake +++ b/Modules/Platform/HP-UX-HP.cmake @@ -17,18 +17,14 @@ if(__HPUX_COMPILER_HP) return() endif() set(__HPUX_COMPILER_HP 1) -set(_Wl_C "") -set(_Wl_CXX "-Wl,") -set(_Wl_Fortran "") -set(_Wl_ASM "") macro(__hpux_compiler_hp lang) set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "+Z") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-Wl,-E,+nodefaultrpath -b -L/usr/lib") set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,+s,-E,+nodefaultrpath") - set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "${_Wl_${lang}}+b") + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,+b") set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":") - set(CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG "${_Wl_${lang}}+h") - set(CMAKE_EXECUTABLE_RUNTIME_${lang}_FLAG "-Wl,+b") + set(CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG "-Wl,+h") set(CMAKE_${lang}_FLAGS_INIT "") endmacro()