The libPSML library itself.
The xmlf90 library Follow the instructions in the package to compile it.
cmake -S. -B_build -DCMAKE_INSTALL_PREFIX=/path/to/install/directory
cmake --build _build
(push _build; ctest ; popd) # To run a simple test
cmake --install _build
The source for the xmlf90 dependency will be fetched from the gitlab repo, configured, and built. If a compiled xmlf90 is available and installed in a path pointed to by $XMLF90_ROOT, do instead:
cmake -S. -B_build -DCMAKE_INSTALL_PREFIX=/path/to/install/directory -DCMAKE_PREFIX_PATH=$XMLF90_ROOT
cmake --build _build
(push _build; ctest ; popd) # To run a simple test
cmake --install _build
./configure --prefix=/path/to/installation --with-xmlf90=/path/to/xmlf90
make
make check
make install
In case the installed xmlf90 does not follow the simple rule of keeping the .mod files in include
and
the library files in lib
, you might need to use the more general expression:
../configure --prefix=/path/to/installation \
--with-xmlf90="$(pkg-config --cflags xmlf90),$(pkg-config --libs xmlf90)"
assuming that the PKG_CONFIG_PATH is appropriate for the discovery of xmlf90.
Go into the subdirectory examples
. In it you can find, among others:
normalize: A program to parse a PSML file and dump the resulting ps
object.
show_psml: A program to parse a PSML file and extract various kinds of information, with optional evaluation of radial functions on a linear grid for later plotting.
Just use the standard CMake idiom in your CMakeLists.txt file:
add_executable(your_program your_sources)
find_package(xmlf90 REQUIRED)
find_package(libpsml REQUIRED)
target_link_libraries(your_program libpsml::libpsml)
The above assumes that the installation directories for xmlf90 and libpsml can be found by CMake. This can be achieved by adding them to the CMAKE_PREFIX_PATH CMake or enviroment variable:
cmake -S. -B_your_build -DCMAKE_PREFIX_PATH="$PSML_ROOT;$XMLF90_ROOT" .......
CMAKE_PREFIX_PATH=$PSML_ROOT:$XMLF90_ROOT cmake -S. -B_your_build .......
Both methods above will create a pkg-config file with information for client programs. It is suggested that the user create a separate directory to hold the program files and prepare a Makefile following this example (FC, FFLAGS, and LDFLAGS need to be set appropriately for the Fortran compiler used):
#---------------------------------------------------------------
#
default: example
#
#---------------------------
XMLF90_ROOT=/path/to/installation
PSML_ROOT=/path/to/installation
PKG_CONFIG_PATH=$(PSML_ROOT)/lib/pkgconfig:$(PKG_CONFIG_PATH)
PKG_CONFIG_PATH=$(XMLF90_ROOT)/lib/pkgconfig:$(PKG_CONFIG_PATH)
#
XMLF90_LIBS=$(pkg-config --libs xmlf90)
XMLF90_INCFLAGS=$(pkg-config --cflags xmlf90)
PSML_LIBS=$(pkg-config --libs libpsml)
PSML_INCFLAGS=$(pkg-config --cflags libpsml)
#
INCFLAGS+= $(XMLF90_INCFLAGS)
INCFLAGS+= $(PSML_INCFLAGS)
LIBS+= $(PSML_LIBS) $(XMLF90_LIBS)
#---------------------------
#
OBJS= m_handlers.o example.o
example: $(OBJS)
$(FC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
#
clean:
rm -f *.o example *.mod
#
# Building rules
#
.F.o:
$(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) $<
.f.o:
$(FC) -c $(FFLAGS) $(INCFLAGS) $<
.F90.o:
$(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) $<
.f90.o:
$(FC) -c $(FFLAGS) $(INCFLAGS) $<
#
#---------------------------------------------------------------
Here it is assumed that the user has two source files, 'example.f90' and 'm_handlers.f90'. Simply typing 'make' will compile 'example', pulling in all the needed modules and library objects.