Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
libcifpp
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
libcifpp
Commits
8dbe5482
Unverified
Commit
8dbe5482
authored
Feb 07, 2022
by
Maarten L. Hekkelman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Backporting CMakeLists.txt file from version 3
parent
1a4ccd86
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
181 additions
and
95 deletions
+181
-95
CMakeLists.txt
+31
-60
Config.cmake.in
+2
-2
changelog
+3
-0
cmake/FindAtomic.cmake
+64
-0
cmake/VersionString.cmake
+77
-0
src/CifUtils.cpp
+4
-33
No files found.
CMakeLists.txt
View file @
8dbe5482
...
...
@@ -25,7 +25,7 @@
cmake_minimum_required
(
VERSION 3.16
)
# set the project name
project
(
cifpp VERSION 2.0.
3
LANGUAGES CXX
)
project
(
cifpp VERSION 2.0.
5
LANGUAGES CXX
)
list
(
PREPEND CMAKE_MODULE_PATH
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake"
)
...
...
@@ -37,17 +37,13 @@ include(CheckIncludeFiles)
include
(
CheckLibraryExists
)
include
(
CMakePackageConfigHelpers
)
include
(
Dart
)
include
(
FindFilesystem
)
include
(
GenerateExportHeader
)
set
(
CXX_EXTENSIONS OFF
)
set
(
CMAKE_CXX_STANDARD 17
)
set
(
CMAKE_CXX_STANDARD_REQUIRED ON
)
find_package
(
Filesystem REQUIRED
)
if
(
"
${
CMAKE_CXX_COMPILER_ID
}
"
STREQUAL
"GNU"
)
# https://stackoverflow.com/questions/63902528/program-crashes-when-filesystempath-is-destroyed
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers"
)
elseif
(
MSVC
)
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
/W4"
)
...
...
@@ -122,22 +118,6 @@ if(MSVC)
message
(
STATUS
"The library and auxiliary files will be installed in $ENV{LOCALAPPDATA}/
${
PROJECT_NAME
}
"
)
set
(
CMAKE_INSTALL_PREFIX
"$ENV{LOCALAPPDATA}/
${
PROJECT_NAME
}
"
CACHE PATH
"..."
FORCE
)
endif
()
# Find out the processor type for the target
if
(
${
CMAKE_SYSTEM_PROCESSOR
}
STREQUAL
"AMD64"
)
set
(
COFF_TYPE
"x64"
)
elseif
(
${
CMAKE_SYSTEM_PROCESSOR
}
STREQUAL
"i386"
)
set
(
COFF_TYPE
"x86"
)
elseif
(
${
CMAKE_SYSTEM_PROCESSOR
}
STREQUAL
"ARM64"
)
set
(
COFF_TYPE
"arm64"
)
else
()
message
(
FATAL_ERROR
"Unsupported or unknown processor type
${
CMAKE_SYSTEM_PROCESSOR
}
"
)
endif
()
set
(
COFF_SPEC
"--coff=
${
COFF_TYPE
}
"
)
# for mrc, just in case
list
(
APPEND CMAKE_PREFIX_PATH
"$ENV{LOCALAPPDATA}/mrc"
)
endif
()
if
(
UNIX AND NOT APPLE AND NOT BUILD_FOR_CCP4 AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
)
...
...
@@ -151,12 +131,12 @@ endif()
if
(
WIN32 AND BUILD_SHARED_LIBS
)
message
(
"Not using resources when building shared libraries for Windows"
)
else
()
find_p
rogram
(
MRC m
rc
)
find_p
ackage
(
M
rc
)
if
(
MRC
)
option
(
CIFPP_
USE_RSRC
"Use mrc to create resources"
ON
)
if
(
MRC
_FOUND
)
option
(
USE_RSRC
"Use mrc to create resources"
ON
)
else
()
message
(
"Using resources not possible
since mrc was not found"
)
message
(
WARNING
"Not using resources
since mrc was not found"
)
endif
()
if
(
CIFPP_USE_RSRC STREQUAL
"ON"
)
...
...
@@ -173,35 +153,22 @@ set(CMAKE_THREAD_PREFER_PTHREAD)
set
(
THREADS_PREFER_PTHREAD_FLAG
)
find_package
(
Threads
)
set
(
Boost_DETAILED_FAILURE_MSG ON
)
if
(
NOT BUILD_SHARED_LIBS
)
set
(
Boost_USE_STATIC_LIBS ON
)
endif
()
find_package
(
Boost 1.70.0 REQUIRED COMPONENTS system iostreams regex program_options
)
if
(
NOT MSVC AND Boost_USE_STATIC_LIBS
)
find_package
(
ZLIB REQUIRED
)
find_package
(
BZip2 REQUIRED
)
list
(
APPEND CIFPP_REQUIRED_LIBRARIES ZLIB::ZLIB
)
endif
()
# Create a revision file, containing the current git version info
find_package
(
Git
)
if
(
GIT_FOUND AND EXISTS
"
${
CMAKE_SOURCE_DIR
}
/.git"
)
include
(
GetGitRevisionDescription
)
get_git_head_revision
(
REFSPEC COMMITHASH
)
include
(
FindFilesystem
)
list
(
APPEND CIFPP_REQUIRED_LIBRARIES
${
STDCPPFS_LIBRARY
}
)
# Generate our own version string
git_describe_working_tree
(
BUILD_VERSION_STRING --match=build --dirty
)
else
()
message
(
WARNING
"Git not found, cannot set version info"
)
include
(
FindAtomic
)
list
(
APPEND CIFPP_REQUIRED_LIBRARIES
${
STDCPPATOMIC_LIBRARY
}
)
SET
(
BUILD_VERSION_STRING
${
PROJECT_VERSION
}
)
endif
()
# generate version.h
string
(
TIMESTAMP BUILD_DATE_TIME
"%Y-%m-%dT%H:%M:%SZ"
UTC
)
configure_file
(
"
${
CMAKE_SOURCE_DIR
}
/src/revision.hpp.in"
"
${
CMAKE_BINARY_DIR
}
/revision.hpp"
@ONLY
)
# Create a revision file, containing the current git version info
include
(
VersionString
)
write_version_header
(
"LibCIFPP"
)
# SymOp data table
if
(
CIFPP_RECREATE_SYMOP_DATA
)
...
...
@@ -209,7 +176,7 @@ if(CIFPP_RECREATE_SYMOP_DATA)
add_executable
(
symop-map-generator
"
${
CMAKE_SOURCE_DIR
}
/tools/symop-map-generator.cpp"
)
target_link_libraries
(
symop-map-generator Threads::Threads
${
Boost_LIBRARIES
}
std::filesystem
${
ZLIB_LIBRARIES
}
${
BZip2
_LIBRARIES
}
)
target_link_libraries
(
symop-map-generator Threads::Threads
${
Boost_LIBRARIES
}
${
CIFPP_REQUIRED
_LIBRARIES
}
)
if
(
Boost_INCLUDE_DIR
)
target_include_directories
(
symop-map-generator PUBLIC
${
Boost_INCLUDE_DIR
}
)
endif
()
...
...
@@ -256,7 +223,6 @@ set(project_headers
${
PROJECT_SOURCE_DIR
}
/include/cif++/CifUtils.hpp
${
PROJECT_SOURCE_DIR
}
/include/cif++/CifValidator.hpp
${
PROJECT_SOURCE_DIR
}
/include/cif++/Compound.hpp
${
PROJECT_SOURCE_DIR
}
/include/cif++/Matrix.hpp
${
PROJECT_SOURCE_DIR
}
/include/cif++/PDB2Cif.hpp
${
PROJECT_SOURCE_DIR
}
/include/cif++/PDB2CifRemark3.hpp
${
PROJECT_SOURCE_DIR
}
/include/cif++/Point.hpp
...
...
@@ -281,7 +247,8 @@ target_include_directories(cifpp
${
CMAKE_BINARY_DIR
}
)
target_link_libraries
(
cifpp Threads::Threads
${
Boost_LIBRARIES
}
std::filesystem
${
ZLIB_LIBRARIES
}
${
BZip2_LIBRARIES
}
)
target_link_libraries
(
cifpp PUBLIC Threads::Threads Boost::regex Boost::iostreams
${
CIFPP_REQUIRED_LIBRARIES
}
)
# target_link_libraries(cifpp PRIVATE)
if
(
CMAKE_CXX_COMPILER_ID STREQUAL
"AppleClang"
)
target_link_options
(
cifpp PRIVATE -undefined dynamic_lookup
)
...
...
@@ -341,6 +308,13 @@ install(TARGETS cifpp
RUNTIME DESTINATION
${
CMAKE_INSTALL_BINDIR
}
INCLUDES DESTINATION
${
CMAKE_INSTALL_INCLUDEDIR
}
)
if
(
MSVC AND BUILD_SHARED_LIBS
)
install
(
FILES $<TARGET_PDB_FILE:
${
PROJECT_NAME
}
>
DESTINATION
${
CMAKE_INSTALL_LIBDIR
}
OPTIONAL
)
endif
()
install
(
EXPORT cifppTargets
FILE
"cifppTargets.cmake"
NAMESPACE cifpp::
...
...
@@ -414,13 +388,6 @@ option(CIFPP_BUILD_TESTS "Build test exectuables" OFF)
if
(
CIFPP_BUILD_TESTS
)
if
(
CIFPP_USE_RSRC
)
add_custom_command
(
OUTPUT
${
CMAKE_CURRENT_BINARY_DIR
}
/cifpp_test_rsrc.obj
COMMAND
${
MRC
}
-o
${
CMAKE_CURRENT_BINARY_DIR
}
/cifpp_test_rsrc.obj
${
CMAKE_SOURCE_DIR
}
/rsrc/mmcif_pdbx_v50.dic
${
COFF_SPEC
}
)
set
(
CIFPP_TEST_RESOURCE
${
CMAKE_CURRENT_BINARY_DIR
}
/cifpp_test_rsrc.obj
)
endif
()
list
(
APPEND CIFPP_tests
# pdb2cif
rename-compound
...
...
@@ -431,14 +398,18 @@ if(CIFPP_BUILD_TESTS)
set
(
CIFPP_TEST
"
${
CIFPP_TEST
}
-test"
)
set
(
CIFPP_TEST_SOURCE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/test/
${
CIFPP_TEST
}
.cpp"
)
add_executable
(
${
CIFPP_TEST
}
${
CIFPP_TEST_SOURCE
}
${
CIFPP_TEST_RESOURCE
}
)
add_executable
(
${
CIFPP_TEST
}
${
CIFPP_TEST_SOURCE
}
)
target_include_directories
(
${
CIFPP_TEST
}
PRIVATE
${
CMAKE_CURRENT_SOURCE_DIR
}
/include
${
CMAKE_CURRENT_BINARY_DIR
}
# for config.h
)
target_link_libraries
(
${
CIFPP_TEST
}
PRIVATE Threads::Threads cifpp
${
Boost_LIBRARIES
}
std::filesystem
${
ZLIB_LIBRARIES
}
${
BZip2_LIBRARIES
}
)
target_link_libraries
(
${
CIFPP_TEST
}
PRIVATE Threads::Threads cifpp
)
if
(
CIFPP_USE_RSRC
)
mrc_target_resources
(
${
CIFPP_TEST
}
${
CMAKE_SOURCE_DIR
}
/rsrc/mmcif_pdbx_v50.dic
)
endif
()
if
(
MSVC
)
# Specify unwind semantics so that MSVC knowns how to handle exceptions
...
...
@@ -449,10 +420,10 @@ if(CIFPP_BUILD_TESTS)
add_custom_command
(
OUTPUT
${
CMAKE_CURRENT_BINARY_DIR
}
/Run
${
CIFPP_TEST
}
.touch
COMMAND $<TARGET_FILE:
${
CIFPP_TEST
}
> --
${
PROJECT
_SOURCE_DIR
}
/test
)
COMMAND $<TARGET_FILE:
${
CIFPP_TEST
}
> --
${
CMAKE
_SOURCE_DIR
}
/test
)
add_test
(
NAME
${
CIFPP_TEST
}
COMMAND $<TARGET_FILE:
${
CIFPP_TEST
}
> --
${
PROJECT
_SOURCE_DIR
}
/test
)
COMMAND $<TARGET_FILE:
${
CIFPP_TEST
}
> --
${
CMAKE
_SOURCE_DIR
}
/test
)
endforeach
()
endif
()
...
...
Config.cmake.in
View file @
8dbe5482
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
find_dependency(Boost 1.70.0 REQUIRED COMPONENTS system iostreams regex program_options)
find_dependency(Threads)
find_dependency(Boost 1.70.0 REQUIRED COMPONENTS system iostreams regex)
if(NOT WIN32)
find_dependency(ZLIB)
find_dependency(BZip2)
endif()
INCLUDE("${CMAKE_CURRENT_LIST_DIR}/cifppTargets.cmake")
...
...
changelog
View file @
8dbe5482
Version
2.0.5
-
Backporting
updated
CMakeLists
.
txt
file
Version
2.0.4
-
Reverted
a
too
strict
test
when
reading
cif
files
.
...
...
cmake/FindAtomic.cmake
0 → 100644
View file @
8dbe5482
# Simple check to see if we need a library for std::atomic
if
(
TARGET std::atomic
)
return
()
endif
()
cmake_minimum_required
(
VERSION 3.10
)
include
(
CMakePushCheckState
)
include
(
CheckIncludeFileCXX
)
include
(
CheckCXXSourceRuns
)
cmake_push_check_state
()
set
(
CMAKE_CXX_STANDARD 17
)
check_include_file_cxx
(
"atomic"
_CXX_ATOMIC_HAVE_HEADER
)
mark_as_advanced
(
_CXX_ATOMIC_HAVE_HEADER
)
set
(
code
[[
#include <atomic>
int main(int argc, char** argv) {
std::atomic<long long> s;
++s;
return 0;
}
]]
)
check_cxx_source_runs
(
"
${
code
}
"
_CXX_ATOMIC_BUILTIN
)
if
(
_CXX_ATOMIC_BUILTIN
)
set
(
_found 1
)
else
()
list
(
APPEND CMAKE_REQUIRED_LIBRARIES atomic
)
list
(
APPEND FOLLY_LINK_LIBRARIES atomic
)
check_cxx_source_runs
(
"
${
code
}
"
_CXX_ATOMIC_LIB_NEEDED
)
if
(
NOT _CXX_ATOMIC_LIB_NEEDED
)
message
(
FATAL_ERROR
"unable to link C++ std::atomic code: you may need \
to install GNU libatomic"
)
else
()
set
(
_found 1
)
endif
()
endif
()
if
(
_found
)
add_library
(
std::atomic INTERFACE IMPORTED
)
set_property
(
TARGET std::atomic APPEND PROPERTY INTERFACE_COMPILE_FEATURES cxx_std_14
)
if
(
_CXX_ATOMIC_BUILTIN
)
# Nothing to add...
elseif
(
_CXX_ATOMIC_LIB_NEEDED
)
set_target_properties
(
std::atomic PROPERTIES IMPORTED_LIBNAME atomic
)
set
(
STDCPPATOMIC_LIBRARY atomic
)
endif
()
endif
()
cmake_pop_check_state
()
set
(
Atomic_FOUND
${
_found
}
CACHE BOOL
"TRUE if we can run a program using std::atomic"
FORCE
)
if
(
Atomic_FIND_REQUIRED AND NOT Atomic_FOUND
)
message
(
FATAL_ERROR
"Cannot run simple program using std::atomic"
)
endif
()
cmake/VersionString.cmake
0 → 100644
View file @
8dbe5482
# SPDX-License-Identifier: BSD-2-Clause
# Copyright (c) 2021 NKI/AVL, Netherlands Cancer Institute
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cmake_minimum_required
(
VERSION 3.15
)
# Create a revision file, containing the current git version info, if any
function
(
write_version_header
)
include
(
GetGitRevisionDescription
)
if
(
NOT
(
GIT-NOTFOUND OR HEAD-HASH-NOTFOUND
))
git_describe_working_tree
(
BUILD_VERSION_STRING --match=build --dirty
)
if
(
BUILD_VERSION_STRING MATCHES
"build-([0-9]+)-g([0-9a-f]+)(-dirty)?"
)
set
(
BUILD_GIT_TAGREF
"
${
CMAKE_MATCH_2
}
"
)
if
(
CMAKE_MATCH_3
)
set
(
BUILD_VERSION_STRING
"
${
CMAKE_MATCH_1
}
*"
)
else
()
set
(
BUILD_VERSION_STRING
"
${
CMAKE_MATCH_1
}
"
)
endif
()
endif
()
else
()
set
(
BUILD_VERSION_STRING
"no git info available"
)
endif
()
include_directories
(
${
CMAKE_BINARY_DIR
}
PRIVATE
)
string
(
TIMESTAMP BUILD_DATE_TIME
"%Y-%m-%dT%H:%M:%SZ"
UTC
)
if
(
ARGC GREATER 0
)
set
(
VAR_PREFIX
"
${
ARGV0
}
"
)
endif
()
file
(
WRITE
"
${
CMAKE_BINARY_DIR
}
/revision.hpp.in"
[[// Generated revision file
#pragma once
#include <ostream>
const char k@VAR_PREFIX@ProjectName[] = "@PROJECT_NAME@";
const char k@VAR_PREFIX@VersionNumber[] = "@PROJECT_VERSION@";
const char k@VAR_PREFIX@VersionGitTag[] = "@BUILD_GIT_TAGREF@";
const char k@VAR_PREFIX@BuildInfo[] = "@BUILD_VERSION_STRING@";
const char k@VAR_PREFIX@BuildDate[] = "@BUILD_DATE_TIME@";
inline void write_version_string(std::ostream &os, bool verbose)
{
os << k@VAR_PREFIX@ProjectName << " version " << k@VAR_PREFIX@VersionNumber << std::endl;
if (verbose)
{
os << "build: " << k@VAR_PREFIX@BuildInfo << ' ' << k@VAR_PREFIX@BuildDate << std::endl;
if (k@VAR_PREFIX@VersionGitTag[0] != 0)
os << "git tag: " << k@VAR_PREFIX@VersionGitTag << std::endl;
}
}
]]
)
configure_file
(
"
${
CMAKE_BINARY_DIR
}
/revision.hpp.in"
"
${
CMAKE_BINARY_DIR
}
/revision.hpp"
@ONLY
)
endfunction
()
src/CifUtils.cpp
View file @
8dbe5482
...
...
@@ -49,6 +49,7 @@
#include <boost/algorithm/string.hpp>
#include "cif++/CifUtils.hpp"
#include "revision.hpp"
namespace
ba
=
boost
::
algorithm
;
namespace
fs
=
std
::
filesystem
;
...
...
@@ -64,39 +65,9 @@ extern int VERBOSE;
std
::
string
get_version_nr
()
{
const
std
::
regex
rxVersionNr1
(
R"(build-(\d+)-g[0-9a-f]{7}(-dirty)?)"
),
rxVersionNr2
(
R"(libcifpp-version: (\d+\.\d+\.\d+))"
);
#include "revision.hpp"
struct
membuf
:
public
std
::
streambuf
{
membuf
(
char
*
data
,
size_t
length
)
{
this
->
setg
(
data
,
data
,
data
+
length
);
}
}
buffer
(
const_cast
<
char
*>
(
kRevision
),
sizeof
(
kRevision
));
std
::
istream
is
(
&
buffer
);
std
::
string
line
,
result
;
while
(
getline
(
is
,
line
))
{
std
::
smatch
m
;
if
(
std
::
regex_match
(
line
,
m
,
rxVersionNr1
))
{
result
=
m
[
1
];
if
(
m
[
2
].
matched
)
result
+=
'*'
;
break
;
}
// always the first, replace with more specific if followed by the other info
if
(
std
::
regex_match
(
line
,
m
,
rxVersionNr2
))
result
=
m
[
1
];
}
return
result
;
std
::
ostringstream
s
;
write_version_string
(
s
,
false
);
return
s
.
str
();
}
// --------------------------------------------------------------------
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment