Skip to content

Commit

Permalink
Fix build system
Browse files Browse the repository at this point in the history
  • Loading branch information
Pansanel committed Jan 29, 2025
1 parent 9a736dc commit dec78a4
Show file tree
Hide file tree
Showing 6 changed files with 267 additions and 181 deletions.
238 changes: 151 additions & 87 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ endif(COMMAND cmake_policy)
#
# We will define two other build types: Debug and Release.
# These names are case-insensitive i.e. you can do -DCMAKE_BUILD_TYPE=debug
if (NOT CMAKE_BUILD_TYPE)
message( "Build Type not set, defaulting to Debug..." )
set(CMAKE_BUILD_TYPE Debug)
endif (NOT CMAKE_BUILD_TYPE)
if(NOT CMAKE_BUILD_TYPE)
message( "Build Type not set, defaulting to Debug...")
set(CMAKE_BUILD_TYPE Debug)
endif(NOT CMAKE_BUILD_TYPE)

message(STATUS "The build type is ${CMAKE_BUILD_TYPE}")

Expand All @@ -28,29 +28,32 @@ include (CheckCXXCompilerFlag)
set(MYCHEM_VERSION_MAJOR 2)
set(MYCHEM_VERSION_MINOR 0)
set(MYCHEM_VERSION_RELEASE 0)
set(MYCHEM_VERSION "${MYCHEM_VERSION_MAJOR}.${MYCHEM_VERSION_MINOR}.${MYCHEM_VERSION_RELEASE}")
set(
MYCHEM_VERSION
"${MYCHEM_VERSION_MAJOR}.${MYCHEM_VERSION_MINOR}.${MYCHEM_VERSION_RELEASE}"
)

#-----------------------------------------------------------------------------
# Define test environment
#-----------------------------------------------------------------------------

if (NOT MY_DB)
set (MY_DB "mysql")
endif (NOT MY_DB)
if(NOT MY_DB)
set(MY_DB "mysql")
endif(NOT MY_DB)

if (MY_HOST AND MY_USER AND MY_PASSWD)
if(MY_HOST AND MY_USER AND MY_PASSWD)
set(MY_ARGS -h ${MY_HOST} -u ${MY_USER} -p ${MY_PASSWD} -b ${MY_DB})
enable_testing()
message( STATUS "Test module enabled" )
else (MY_HOST AND MY_USER AND MY_PASSWD)
if (MY_HOST AND MY_USER)
message( STATUS "Test module enabled")
else(MY_HOST AND MY_USER AND MY_PASSWD)
if(MY_HOST AND MY_USER)
set(MY_ARGS -h ${MY_HOST} -u ${MY_USER} -b ${MY_DB})
enable_testing()
message( STATUS "Test module enabled" )
else (MY_HOST AND MY_USER)
message( STATUS "Test module disabled" )
endif (MY_HOST AND MY_USER)
endif (MY_HOST AND MY_USER AND MY_PASSWD)
message(STATUS "Test module enabled")
else(MY_HOST AND MY_USER)
message(STATUS "Test module disabled")
endif(MY_HOST AND MY_USER)
endif(MY_HOST AND MY_USER AND MY_PASSWD)

option(BUILD_SHARED "enable static build support" ON)

Expand All @@ -59,13 +62,13 @@ option(BUILD_SHARED "enable static build support" ON)
# Software dependency
#-----------------------------------------------------------------------------

include( FindPkgConfig )
include(FindPkgConfig)

# Open Babel dependency
find_package( OpenBabel REQUIRED )
find_package(OpenBabel REQUIRED)

# MySQL
find_package( MySQL REQUIRED )
find_package(MySQL REQUIRED)


#-----------------------------------------------------------------------------
Expand All @@ -84,86 +87,147 @@ include(CheckSymbolExists)
include(CheckTypeSize)
include(CheckCSourceCompiles)

check_include_file(stdlib.h HAVE_STLID_H)
check_include_file(stdio.h HAVE_STDIO_H)
check_include_file(string.h HAVE_STRING_H)
check_include_file_cxx(sstream HAVE_SSTREAM)
check_include_file(stdlib.h HAVE_STLID_H)
check_include_file(stdio.h HAVE_STDIO_H)
check_include_file(string.h HAVE_STRING_H)
check_include_file_cxx(sstream HAVE_SSTREAM)

if (UNIX)
if (APPLE)
if(UNIX)
if(APPLE)
set(CMAKE_INSTALL_NAME_DIR ${LIB_INSTALL_DIR})
endif (APPLE)
endif (UNIX)

if (APPLE)
set (CMAKE_SHARED_LINKER_FLAGS "-single_module -multiply_defined suppress ${CMAKE_SHARED_LINKER_FLAGS}")
set (CMAKE_MODULE_LINKER_FLAGS "-multiply_defined suppress ${CMAKE_MODULE_LINKER_FLAGS}")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-common")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-common")
endif (APPLE)

if (CMAKE_SYSTEM_NAME MATCHES Linux)
endif(APPLE)
endif(UNIX)

if(APPLE)
set(
CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} \
-single_module -multiply_defined suppress"
)
set(
CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} \
-multiply_defined suppress"
)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-common")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-common")
endif(APPLE)

if(CMAKE_SYSTEM_NAME MATCHES Linux)
# Fix a bug with dynamic plugin
add_definitions( -D__CYGWIN__)

if (CMAKE_COMPILER_IS_GNUCXX)
set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_SHARED_LINKER_FLAGS}")
set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_SHARED_LINKER_FLAGS}")
set (CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_MODULE_LINKER_FLAGS}")
set (CMAKE_MODULE_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_MODULE_LINKER_FLAGS}")
set (CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_EXE_LINKER_FLAGS}")
set (CMAKE_EXE_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_EXE_LINKER_FLAGS}")
endif (CMAKE_COMPILER_IS_GNUCXX)

if (CMAKE_C_COMPILER MATCHES "icc")
set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_SHARED_LINKER_FLAGS}")
set ( CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_MODULE_LINKER_FLAGS}")
endif (CMAKE_C_COMPILER MATCHES "icc")

endif (CMAKE_SYSTEM_NAME MATCHES Linux)
if(CMAKE_COMPILER_IS_GNUCXX)
set(
CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} \
-Wl,--fatal-warnings -Wl,--no-undefined -lc"
)
set(
CMAKE_SHARED_LINKER_FLAGS
"${CMAKE_SHARED_LINKER_FLAGS} -Wl,--enable-new-dtags"
)
set(
CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} \
-Wl,--fatal-warnings -Wl,--no-undefined -lc"
)
set(
CMAKE_MODULE_LINKER_FLAGS
"${CMAKE_MODULE_LINKER_FLAGS} -Wl,--enable-new-dtags"
)
set(
CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -Wl,--enable-new-dtags"
)
set(
CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -Wl,--fatal-warnings -Wl,--no-undefined -lc"
)
endif(CMAKE_COMPILER_IS_GNUCXX)

if(CMAKE_C_COMPILER MATCHES "icc")
set(
CMAKE_SHARED_LINKER_FLAGS
"${CMAKE_SHARED_LINKER_FLAGS} \
-Wl,--fatal-warnings -Wl,--no-undefined -lc"
)
set(
CMAKE_MODULE_LINKER_FLAGS
"${CMAKE_MODULE_LINKER_FLAGS} \
-Wl,--fatal-warnings -Wl,--no-undefined -lc"
)
endif(CMAKE_C_COMPILER MATCHES "icc")

endif(CMAKE_SYSTEM_NAME MATCHES Linux)


#-----------------------------------------------------------------------------
# Compiler specific settings
#-----------------------------------------------------------------------------

if (CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2 -g")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3 -fno-inline -fno-reorder-blocks -fno-schedule-insns")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -DNDEBUG")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O2 -g")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline")

if (CMAKE_SYSTEM_NAME MATCHES Linux)
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wno-long-long -std=iso9899:1990 -Wundef -Wcast-align -Werror-implicit-function-declaration -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-check-new -fno-common")
endif (CMAKE_SYSTEM_NAME MATCHES Linux)
if(CMAKE_COMPILER_IS_GNUCXX)
set(
CMAKE_CXX_FLAGS_RELEASE
"${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG"
)
set(
CMAKE_CXX_FLAGS_RELWITHDEBINFO
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2 -g"
)
set(
CMAKE_CXX_FLAGS_DEBUG
"${CMAKE_CXX_FLAGS_DEBUG} \
-g3 -fno-inline -fno-reorder-blocks -fno-schedule-insns \
-Wall -Wextra"
)
set(
CMAKE_C_FLAGS_RELEASE
"${CMAKE_C_FLAGS_RELEASE} -O3 -DNDEBUG"
)
set(
CMAKE_C_FLAGS_RELWITHDEBINFO
"${CMAKE_C_FLAGS_RELWITHDEBINFO} -O2 -g"
)
set(
CMAKE_C_FLAGS_DEBUG
"${CMAKE_C_FLAGS_DEBUG} \
-g3 -fno-inline -fno-reorder-blocks -fno-schedule-insns \
-Wall -Wextra"
)

# get the gcc version
exec_program(${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)

string (REGEX MATCH "[345]\\.[0-9]\\.[0-9]" _gcc_version "${_gcc_version_info}")
# gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the patch level, handle this here:
if (NOT _gcc_version)
string (REGEX REPLACE ".*\\(GCC\\).* ([34]\\.[0-9]) .*" "\\1.0" _gcc_version "${_gcc_version_info}")
endif (NOT _gcc_version)

endif (CMAKE_COMPILER_IS_GNUCXX)

if (CMAKE_C_COMPILER MATCHES "icc")

# Select flags.
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG -DQT_NO_DEBUG")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
set(CMAKE_CXX_FLAGS_DEBUG "-O2 -g -fno-inline -noalign")
set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG -DQT_NO_DEBUG")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
set(CMAKE_C_FLAGS_DEBUG "-O2 -g -fno-inline -noalign")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ansi -Wall -w1 -Wpointer-arith -fno-common")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ansi -Wall -w1 -Wpointer-arith -fno-exceptions -fno-common")
endif (CMAKE_C_COMPILER MATCHES "icc")
exec_program(
${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info
)

string(
REGEX MATCH "[345]\\.[0-9]\\.[0-9]" _gcc_version "${_gcc_version_info}"
)
# gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the
# patch level, handle this here.
if(NOT _gcc_version)
string(
REGEX REPLACE ".*\\(GCC\\).* ([34]\\.[0-9]) .*" "\\1.0"
_gcc_version "${_gcc_version_info}"
)
endif(NOT _gcc_version)

endif(CMAKE_COMPILER_IS_GNUCXX)

if(CMAKE_C_COMPILER MATCHES "icc")
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG -DQT_NO_DEBUG")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
set(CMAKE_CXX_FLAGS_DEBUG "-O2 -g -fno-inline -noalign")
set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG -DQT_NO_DEBUG")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
set(CMAKE_C_FLAGS_DEBUG "-O2 -g -fno-inline -noalign")
set(
CMAKE_C_FLAGS
"${CMAKE_C_FLAGS} -ansi -Wall -w1 -Wpointer-arith -fno-common"
)
set(
CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} \
-ansi -Wall -w1 -Wpointer-arith -fno-exceptions -fno-common"
)
endif(CMAKE_C_COMPILER MATCHES "icc")


#-----------------------------------------------------------------------------
Expand Down
17 changes: 10 additions & 7 deletions cmake/modules/FindOpenBabel.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,22 @@
# OPENBABEL_FOUND - system has OpenBabel
# OPENBABEL_INCLUDE_DIR - the OpenBabel include directory
# OPENBABEL_LIBRARIES - Link these to use OpenBabel
# OPENBABEL_LIBRARY_FILE - Name of the OpenBabel library file

# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.

#
# Search for Open Babel libraries and includes
#
if (OPENBABEL_INCLUDE_DIR AND OPENBABEL_LIBRARIES)
if(OPENBABEL_INCLUDE_DIR AND OPENBABEL_LIBRARIES AND OPENBABEL_LIBRARY_FILE)
# in cache already
set(OPENBABEL_FOUND TRUE)
else (OPENBABEL_INCLUDE_DIR AND OPENBABEL_LIBRARIES)

include(FindPkgConfig)

else(OPENBABEL_INCLUDE_DIR AND OPENBABEL_LIBRARIES AND OPENBABEL_LIBRARY_FILE)
if(NOT PKG_CONFIG_FOUND)
include(CMakeFindDependencyMacro)
find_dependencu(PkgConfig)
endif()
# query pkg-config asking for a openbabel-3
exec_program(${PKG_CONFIG_EXECUTABLE} ARGS openbabel-3 RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
if(_return_VALUE STREQUAL "0")
Expand Down Expand Up @@ -48,8 +50,9 @@ else (OPENBABEL_INCLUDE_DIR AND OPENBABEL_LIBRARIES)

if(OPENBABEL_INCLUDE_DIR AND OPENBABEL_LIBRARIES AND OPENBABEL_MINI_FOUND)
set(OPENBABEL_FOUND TRUE)
get_filename_component(OPENBABEL_LIBRARY_FILE ${OPENBABEL_LIBRARIES} NAME)
endif(OPENBABEL_INCLUDE_DIR AND OPENBABEL_LIBRARIES AND OPENBABEL_MINI_FOUND)
endif()
endif(OPENBABEL_INCLUDE_DIR AND OPENBABEL_LIBRARIES AND OPENBABEL_LIBRARY_FILE)

if (OPENBABEL_FOUND)
message(STATUS "Found OpenBabel: ${OPENBABEL_LIBRARIES}")
Expand All @@ -58,4 +61,4 @@ else (OPENBABEL_FOUND)
message(FATAL_ERROR "Could NOT find OpenBabel")
endif (OPENBABEL_FIND_REQUIRED)
endif (OPENBABEL_FOUND)
mark_as_advanced(OPENBABEL_INCLUDE_DIR OPENBABEL_LIBRARIES)
mark_as_advanced(OPENBABEL_INCLUDE_DIR OPENBABEL_LIBRARIES OPENBABEL_LIBRARY_FILE)
3 changes: 3 additions & 0 deletions include/mychem/config.h.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,8 @@
/* Mychem version */
#define MYCHEM_VERSION "${MYCHEM_VERSION}"

/* OpenBabel lib version */
#define OB_LIBRARY_FILE "${OPENBABEL_LIBRARY_FILE}"

#endif /* __MYCHEM_CONFIG_H */

Loading

0 comments on commit dec78a4

Please sign in to comment.