HP aCC: record compiler flag for Ansi C++98 support for version 3.80 onwards

Old versions of aCC need a special compiler flag to get full C++98 template
support as e.g. CMake itself or the Complex and ComplexOneConfig tests need.
The same versions need a special flag to get a proper C++ library, too.
This commit is contained in:
Rolf Eike Beer 2014-04-15 18:52:30 +02:00
parent fd8bb34278
commit b0f277db38
6 changed files with 67 additions and 1 deletions

View File

@ -2,3 +2,12 @@ set(CMAKE_CXX_VERBOSE_FLAG "-v")
set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
# HP aCC since version 3.80 supports the flag +hpxstd98 to get ANSI C++98
# template support. It is known that version 6.25 doesn't need that flag.
# Current assumption: the flag is needed for every version from 3.80 to 4
# to get it working.
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4 AND
NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.80)
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "+hpxstd98")
endif()

View File

@ -1,7 +1,15 @@
cmake_minimum_required(VERSION 2.8.11)
project(AliasTarget)
set(CMAKE_CXX_STANDARD 98)
# Those versions of the HP compiler that need a flag to get proper C++98
# template support also need a flag to use the newer C++ library.
if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
CMAKE_CXX98_STANDARD_COMPILE_OPTION STREQUAL "+hpxstd98")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
endif ()
add_library(foo SHARED empty.cpp)
add_library(PREFIX::Foo ALIAS foo)
add_library(Another::Alias ALIAS foo)

View File

@ -392,6 +392,21 @@ if(NOT RESULT STREQUAL "a[b]c[d]e")
"string(REGEX REPLACE ... ) test failed (\"${RESULT}\" v. \"a[b]c[d]e\")")
endif()
#
# This tests needs Ansi C++98
#
set(CMAKE_CXX_STANDARD 98)
#
# GNU extensions are needed for stricmp() on Windows.
#
set(CMAKE_CXX_EXTENSIONS TRUE)
# Those versions of the HP compiler that need a flag to get proper C++98
# template support also need a flag to use the newer C++ library.
if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
CMAKE_CXX98_STANDARD_COMPILE_OPTION STREQUAL "+hpxstd98")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
endif ()
#
# Create the libs and the main exe

View File

@ -362,6 +362,21 @@ if(NOT RESULT STREQUAL "a[b]c[d]e")
"string(REGEX REPLACE ... ) test failed (\"${RESULT}\" v. \"a[b]c[d]e\")")
endif()
#
# This tests needs Ansi C++98
#
set(CMAKE_CXX_STANDARD 98)
#
# GNU extensions are needed for stricmp() on Windows.
#
set(CMAKE_CXX_EXTENSIONS TRUE)
# Those versions of the HP compiler that need a flag to get proper C++98
# template support also need a flag to use the newer C++ library.
if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
CMAKE_CXX98_STANDARD_COMPILE_OPTION STREQUAL "+hpxstd98")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
endif ()
#
# Create the libs and the main exe

View File

@ -57,6 +57,15 @@ endif()
include(GenerateExportHeader)
set(CMAKE_CXX_STANDARD 98)
# Those versions of the HP compiler that need a flag to get proper C++98
# template support also need a flag to use the newer C++ library.
if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
CMAKE_CXX98_STANDARD_COMPILE_OPTION STREQUAL "+hpxstd98")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
endif ()
add_subdirectory(lib_shared_and_static)
add_compiler_export_flags()

View File

@ -24,6 +24,16 @@ include_directories(
${Plugin_SOURCE_DIR}/include
)
# We need proper C++98 support from the compiler
set(CMAKE_CXX_STANDARD 98)
# Those versions of the HP compiler that need a flag to get proper C++98
# template support also need a flag to use the newer C++ library.
if (CMAKE_CXX_COMPILER_ID STREQUAL HP AND
CMAKE_CXX98_STANDARD_COMPILE_OPTION STREQUAL "+hpxstd98")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AA")
endif ()
# Create an executable that exports an API for use by plugins.
add_executable(example_exe src/example_exe.cxx)
set_target_properties(example_exe PROPERTIES