Commit a3cf3343 by Maarten L. Hekkelman

configure script

parent 188fa4e5
# makefile for libcif++
.PHONY: firstTarget
firstTarget: all
CXX = @CXX@
CXXFLAGS = @CXXFLAGS@
CXXFLAGS += @BOOST_CPPFLAGS@
LDFLAGS += @BOOST_LDFLAGS@
prefix = @prefix@
exec_prefix = @exec_prefix@
libdir = @libdir@
includedir = @includedir@
LIB_NAME = libcif++
# DIST_NAME = $(LIB_NAME)$(VERSION)
# SO_NAME = $(LIB_NAME).so.$(VERSION_MAJOR)
# SHARED_LIB_NAME = $(SO_NAME).$(VERSION_MINOR)
STATIC_LIB_NAME = $(LIB_NAME).a
OUTPUT = ./
# SHARED_LIB = $(OUTPUT)/$(SHARED_LIB_NAME)
STATIC_LIB = $(OUTPUT)/$(STATIC_LIB_NAME)
LIBDIR ?= $(PREFIX)/lib
INCDIR ?= $(PREFIX)/include
MANDIR ?= $(PREFIX)/man/man3
DOCDIR ?= $(PREFIX)/share/doc/libzeep-doc
# main build variables
CXXFLAGS += -I. -pthread -I include/
CXXFLAGS += -Wall -Wno-multichar
PACKAGES +=
ifneq ($(PACKAGES),)
CXXFLAGS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags $(PACKAGES))
LDFLAGS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs $(PACKAGES) )
endif
# Use the DEBUG flag to build debug versions of the code
DEBUG = @DEBUG@
ifeq "$(DEBUG)" "1"
DEFINES += DEBUG
CXXFLAGS += -g -O0
LDFLAGS += -g
else
CXXFLAGS += -O2
DEFINES += NDEBUG
endif
# targets
VPATH += src:test
CXXFLAGS += $(DEFINES:%=-D%)
OBJDIR = obj
ifeq "$(DEBUG)" "1"
OBJDIR := $(OBJDIR).dbg
endif
$(OBJDIR):
mkdir -p $(OBJDIR)
LIBCIF_SRC = AtomShape.cpp \
AtomType.cpp \
BondMap.cpp \
Cif2PDB.cpp \
Cif++.cpp \
CifParser.cpp \
CifUtils.cpp \
CifValidator.cpp \
Compound.cpp \
DistanceMap.cpp \
MapMaker.cpp \
PDB2Cif.cpp \
PDB2CifRemark3.cpp \
Point.cpp \
ResolutionCalculator.cpp \
Secondary.cpp \
Statistics.cpp \
Structure.cpp \
Symmetry.cpp \
TlsParser.cpp
SOURCES = $(addprefix src/,$(LIBCIF_SRC))
OBJECTS = $(addprefix $(OBJDIR)/, $(notdir $(SOURCES:%.cpp=%.o)))
# Special rules to generate symmetry operation number table
tools/symop-map-generator: tools/symop-map-generator.cpp
src/SymOpTable_data.cpp: tools/symop-map-generator $(CLIBD)/symop.lib
tools/symop-map-generator > $@
$(OBJDIR)/Symmetry.o: src/SymOpTable_data.cpp
$(STATIC_LIB): $(OBJECTS)
ar rc $@ $(OBJECTS)
ranlib $@
$(SHARED_LIB): $(OBJECTS)
$(CXX) -shared -o $(SHARED_LIB) -Wl,-soname=$(SO_NAME) $(OBJECTS) $(LDFLAGS)
ln -fs $(SHARED_LIB_NAME) $(OUTPUT)/$(SO_NAME)
ln -fs $(SHARED_LIB_NAME) $(OUTPUT)/$(LIB_NAME).so
ifeq "$(BUILD_STATIC_LIB)" "1"
BUILD_LIBS = $(STATIC_LIB)
endif
ifeq "$(BUILD_SHARED_LIB)" "1"
BUILD_LIBS += $(SHARED_LIB)
endif
libs: $(BUILD_LIBS)
.PHONY: libs
static-lib: $(STATIC_LIB)
.PHONY: static-lib
shared-lib: $(SHARED_LIB)
.PHONY: shared-lib
install-libs: $(SHARED_LIB)
install -d $(LIBDIR)
install $(SHARED_LIB) $(LIBDIR)/$(SHARED_LIB_NAME)
strip --strip-unneeded $(LIBDIR)/$(SHARED_LIB_NAME)
ln -Tfs $(SHARED_LIB_NAME) $(LIBDIR)/$(SO_NAME)
ln -Tfs $(SHARED_LIB_NAME) $(LIBDIR)/$(LIB_NAME).so
$(LD_CONFIG) -n $(LIBDIR)
install-dev: $(STATIC_LIB)
install -d $(LIBDIR) $(INCDIR)/zeep/xml $(INCDIR)/zeep/http $(INCDIR)/zeep/http/webapp
for f in $(HEADERS); do install ../include/$$f $(INCDIR)/$$f; done
install $(STATIC_LIB) $(LIBDIR)/$(STATIC_LIB_NAME)
strip -SX $(LIBDIR)/$(STATIC_LIB_NAME)
install: install-libs install-dev
-include $(OBJECTS:%.o=%.d)
$(OBJECTS:.o=.d):
$(OBJDIR)/%.o: %.cpp | $(OBJDIR)
@ echo ">>" $<
@ $(CXX) -MD -c -o $@ $< $(CFLAGS) $(CXXFLAGS)
.PHONY: clean
clean:
rm -rf $(OBJDIR)/* $(OUTPUT)/$(LIB_NAME)*
# Test rules
BOOST_LIBS =
define TEST_template =
-include $$(OBJDIR)/$(1)-test.d
$(1)_OBJECTS = $$(OBJECTS) $$(OBJDIR)/$(1)-test.o
test/$(1)-test: $$($(1)_OBJECTS)
@ echo ">>> building $(1)-test"
@ $(CXX) -o $$@ $$($(1)_OBJECTS) $$(CFLAGS) $$(CXXFLAGS) $(LDFLAGS) $(BOOST_LIBS:%=-lboost_%) -lstdc++fs
.PHONY: $(1)-test
$(1)-test: test/$(1)-test
cd test; ./$(1)-test $$($(1)_PARAMS)
endef
TESTS = unit
$(foreach part,$(TESTS),$(eval $(call TEST_template,$(part))))
.PHONY: test
test: $(TESTS:%=%-test)
dist-clean: clean
FORCE:
# ifeq ($(CLIB),)
# $(warning "")
# $(warning "The CCP4 environment seems to be unavailable, please source it")
# $(warning "")
# CLIBD ?= $(CLIB)/lib/data
# make.config:
# @ echo "No make.config file, writing a default one"
# @ echo "#NO_RSRC = 1 # uncomment this line to disable resources" > make.config
# @ echo "" >> make.config
# @ echo "NEWUOA_DIR = # Please specify" >> make.config
# @ echo "" >> make.config
# @ echo "INCLUDE_DIR += \$$(NEWUOA_DIR:%=%/include) $(CINCL)" >> make.config
# @ echo "LIBRARY_DIR += \$$(NEWUOA_DIR:%=%/lib) $(CLIB)" >> make.config
# @ echo
# @ echo "The default make.config now contains:"
# @ cat make.config
# @ echo
# @ echo "Please update this make.config file to include the correct paths"
# MRC ?= mrc
# ifeq ($(NO_RSRC),)
# ifeq ($(shell which $(MRC)),)
# $(warning "")
# $(warning "The executable mrc is not found in your path.")
# $(warning "Please consider installing it to enable built-in data files.")
# $(warning "See https://github.com/mhekkel/mrc")
# $(warning "")
# else
# DEFINES += USE_RSRC
# endif
# endif
# SO_NAME = libcif++.so.1
# CPU = $(shell uname -m)
# OS = $(shell uname -o)
# SYSLIBDIR = /usr/lib
# ifeq "$(OS)" "GNU/Linux"
# SYSLIBDIR := $(SYSLIBDIR)/$(CPU)-linux-gnu
# endif
# WARNINGS = all no-multichar no-unknown-pragmas no-deprecated-declarations
# RANLIB ?= ranlib
# INCLUDE_DIR += ./include
# LIBRARY_DIR +=
# CFLAGS += -std=c++17 -pthread -fPIC
# CFLAGS += -ffunction-sections -fdata-sections
# CFLAGS += $(addprefix -I, $(INCLUDE_DIR))
# # generic defines
# CFLAGS += $(addprefix -W, $(WARNINGS))
# CFLAGS += $(addprefix -D, $(DEFINES))
# LIBS += newuoa
# # LDFLAGS += $(LIBRARY_DIR:%=-L %) $(LIBS:%=-l%) -g
# OBJDIR = obj
# ifneq ($(DEBUG),1)
# CFLAGS += -O3 -ffunction-sections -fdata-sections -DNDEBUG -g
# else
# CFLAGS += -g -DDEBUG
# OBJDIR := $(OBJDIR).dbg
# endif
# ifeq ($(PROFILE),1)
# CFLAGS += -pg
# LDFLAGS += -pg
# OBJDIR := $(OBJDIR).profile
# endif
# CXXFLAGS = $(CFLAGS)
# LIBCIF_SRC = AtomShape.cpp \
# AtomType.cpp \
# BondMap.cpp \
# Cif2PDB.cpp \
# Cif++.cpp \
# CifParser.cpp \
# CifUtils.cpp \
# CifValidator.cpp \
# Compound.cpp \
# DistanceMap.cpp \
# MapMaker.cpp \
# PDB2Cif.cpp \
# PDB2CifRemark3.cpp \
# Point.cpp \
# ResolutionCalculator.cpp \
# Secondary.cpp \
# Statistics.cpp \
# Structure.cpp \
# Symmetry.cpp \
# TlsParser.cpp
# SOURCES = $(addprefix src/,$(LIBCIF_SRC))
# OBJECTS = $(addprefix $(OBJDIR)/, $(notdir $(SOURCES:%.cpp=%.o)))
# SOURCE_DIRS = $(sort $(dir $(SOURCES)))
# empty =
# space = $(empty) $(empty)
# SRC_VPATH = $(subst $(space),:,$(SOURCE_DIRS))
# VPATH += $(SRC_VPATH)
# $(OBJDIR)/%.o: %.cpp | $(OBJDIR)
# @ echo ">>" $<
# @ $(CXX) -MD -c -o $@ $< $(CFLAGS) $(CXXFLAGS)
# -include $(OBJECTS:%.o=%.d)
# $(OBJECTS:.o=.d):
# $(OBJDIR):
# @ test -d $@ || mkdir -p $@
# # Special rules to generate symmetry operation number table
# tools/symop-map-generator: tools/symop-map-generator.cpp
# src/SymOpTable_data.cpp: tools/symop-map-generator $(CLIBD)/symop.lib
# tools/symop-map-generator > $@
# $(OBJDIR)/Symmetry.o: src/SymOpTable_data.cpp
# .PHONY: clean all
# clean:
# rm -rf $(OBJDIR)/* libcif++.a
# .PHONY: static-lib
# static-lib: libcif++.a
# libcif++.a: $(OBJECTS)
# ar rc $@ $^
# $(RANLIB) $@
# .PHONY: shared-lib
# shared-lib: libcif++.a
# libcif++.so: $(OBJECTS)
# $(CXX) -shared -o $(SO_NAME) $^ $(LDFLAGS) -Wl,-soname=$(SO_NAME)
# ln -fs $(SO_NAME) $@
# BOOST_LIB_DIR ?= $(SYSLIBDIR)
# BOOST_LIBS = date_time iostreams program_options filesystem thread math_c99 math_c99f timer chrono system regex random
# BOOST_LIBS := $(BOOST_LIBS:%=boost_%$(BOOST_LIB_SUFFIX))
# BOOST_LIBS := $(BOOST_LIBS:%=$(BOOST_LIB_DIR)/lib%.a)
# CLIPPER_LIBS = clipper-ccp4 clipper-minimol clipper-mmdb clipper-cns clipper-phs clipper-contrib clipper-core
# CLIPPER_LIB_DIR ?= $(CLIB)
# ifeq ($(STATIC_CPP4_LIBS),1)
# CLIPPER_LIBS := $(CLIPPER_LIBS:%=$(CLIPPER_LIB_DIR)/lib%.a)
# else
# CLIPPER_LIBS := $(CLIPPER_LIBS:%=-l%)
# endif
# ZEEP_LIBS ?= xml el generic
# ZEEP_LIBS := $(ZEEP_LIBS:%=-lzeep-%)
# CCP4_LIBS += ccp4c mmdb2 rfftw fftw
# CCP4_LIB_DIR ?= $(CLIB)
# ifeq ($(STATIC_CPP4_LIBS),1)
# CCP4_LIBS := $(CCP4_LIBS:%=$(CCP4_LIB_DIR)/lib%.a)
# else
# CCP4_LIBS := $(CCP4_LIB_DIR:%=-L%) $(CCP4_LIBS:%=-l%)
# endif
# TEST_LIBS = $(LIBS)
# TEST_LIBS += m rt
# TEST_LIBS := $(TEST_LIBS:%=-l%)
# TEST_LIBS += $(ZEEP_LIBS) $(BOOST_LIBS) $(CLIPPER_LIBS) $(CCP4_LIBS) -lz -lbz2 -lpthread
# TEST_LDFLAGS = $(LDFLAGS)
# TEST_LDFLAGS += $(LIBRARY_DIR:%=-L %) $(TEST_LIBS) -g
# TEST_LDFLAGS += -Wl,-rpath=$(CLIB)
# VPATH += test
# define TEST_template =
# $$(OBJDIR)/$(1)_rsrc.o: rsrc/dictionaries
# $(MRC) -o $$@ $$^
# test/$(1)-test: $$(OBJECTS) $$(OBJDIR)/$(1)-test.o libcif++.a $$(OBJDIR)/$(1)_rsrc.o
# @ echo ">>> building $(1)-test"
# @ $(CXX) -o $$@ $$(OBJDIR)/$(1)-test.o $$(OBJDIR)/$(1)_rsrc.o $$(OBJECTS) $$(CFLAGS) $$(CXXFLAGS) $(TEST_LDFLAGS)
# .PHONY: $(1)-test
# $(1)-test: test/$(1)-test
# test/$(1)-test $$($(1)_PARAMS)
# -include $$(OBJDIR)/$(1)-test.d
# endef
# TESTS = unit
# $(foreach part,$(TESTS),$(eval $(call TEST_template,$(part))))
# .PHONY: test
# test: $(TESTS:%=%-test)
# all: static-lib
libcif++ and pdb-redo tools
===========================
libcif++
========
This is the README file for libcif++ and the suite of PDB-REDO tools
using this library.
This is the README file for libcif++.
Requirements
------------
......@@ -23,17 +22,6 @@ Other requirements are:
functionality.
- [newuoa-cpp](https://github.com/elsid/newuoa-cpp), required to
calculate atom radii.
- [libzeep](https://github.com/mhekkel/libzeep), a library that
contains a full validating XML parser as well as a complete HTTP,
SOAP and REST server implementation.
- [nlohmann/json](https://github.com/nlohmann/json), a header only
library to parse and write JSON. This is only a requirement if you
have a libzeep version older than version 4.
As stated, the nlohmann library is only needed if you use libzeep 3.0.x
which is bundled with Debian and derivatives (`apt-get install libzeep-dev`).
If you clone the version of libzeep on github the nlohmann json library will
not be used.
Building
--------
......
// test to see if the clipper version is up-to-date enough
#include <clipper/core/atomsf.h>
int main()
{
auto sf = clipper::ScatteringFactors::instance()["C"];
return 0;
}
AC_INIT([libcif++], 1.0, [m.hekkelman@nki.nl])
dnl Switch to a C++ compiler, and check if it works.
AC_LANG(C++)
AX_CXX_COMPILE_STDCXX_14([noext])
AC_CONFIG_SRCDIR([src/AtomShape.cpp])
AC_CONFIG_AUX_DIR(config)
AC_CONFIG_MACRO_DIR([config/m4])
AC_PREFIX_DEFAULT(/usr/local)
AC_DEFUN([read_test], [AC_LANG_SOURCE(
esyscmd(tools/m4esc.sh config-tests/$1))])
AX_BOOST_BASE([1.73])
AC_PROG_INSTALL
AC_ARG_VAR([DEBUG], [Build a debug version of the library])
AC_PATH_PROG([PKG_CONFIG], [pkg-config])
AC_ARG_VAR([CCP4], [The location where CCP4 is installed])
AS_IF([test x"$CCP4" != x""],
[
CPPFLAGS="$CPPFLAGS -I ${CCP4}/include"
CXXFLAGS="$CXXFLAGS -I ${CCP4}/include"
])
AC_ARG_WITH([clipper],
AS_HELP_STRING([--with-clipper=@<:@location@:>@],
[Use the clipper library as specified.
@<:@location=$CCP4@:>@]),
[
CPPFLAGS="$CPPFLAGS -I ${withval}/include"
CXXFLAGS="$CXXFLAGS -I ${withval}/include"
])
AC_ARG_WITH([newuoa],
AS_HELP_STRING([--with-newuoa=@<:@location@:>@],
[Use the newuoa library as specified.]),
[
CPPFLAGS="$CPPFLAGS -I ${withval}/include"
CXXFLAGS="$CXXFLAGS -I ${withval}/include"
])
AC_CHECK_HEADER(
[clipper/clipper.h],
[],
[AC_MSG_ERROR([
Can't find the main clipper include file clipper/clipper.h. Please
specify either the CCP4 location of the location of the installed
clipper using --with-clipper=<path>
])])
AC_MSG_CHECKING([clipper version])
AC_COMPILE_IFELSE(
[read_test(clipper-test.cpp)],
[],
[AC_MSG_ERROR([The version of clipper is not up to date])])
AC_CHECK_HEADER(
[newuoa.h],
[],
[AC_MSG_ERROR([
Can't find the newuoa include file newuoa.h. Please install this
library and specify its location with --with-newuoa=<path>.
You can find newuoa at https://github.com/elsid/newuoa-cpp.git
])])
# AC_ARG_ENABLE(
# debug,
# [AS_HELP_STRING([--enable-debug], [Generate a debug version of the library])],
# [],
# [enable_debug=auto])
dnl Process Makefile.in to create Makefile
AC_OUTPUT([GNUmakefile])
#!/bin/bash
set -e
file="$1"
echo -n "[["
while IFS= read -r line; do
echo $line | sed -e 's/\[/@<:@/g' -e 's/\]/@:>@/g' -e 's/#/@%:@/g' -e 's/\$/@S|@/g'
echo
done < "$file"
echo -n "]]"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment