Debug utility for finding missing files, directories, links, includes, and references used in lib.defs files for the OpenAccess file format.
This application is built using two boost libraries: boost/program_options and boost/filesystem. This is an attempt to allow other operating systems other than Linux to take advantage of this application in the future.
Tested Requirements: (You might be able to earlier versions, but this might require some alterations of code.) Linux RHEL6 Boost version 1_64_0 with header files
$ locate program_options.hpp
/usr/local/boost_1_64_0/boost/program_options.hpp
$ locate locate filesystem/operations.hpp
/usr/local/boost_1_64_0/boost/filesystem/operations.hpp
If these two files are not found on your system, please go to http://boost.org to get them.
To get started, here are the initial steps you will need to run.
$ git clone https://github.com/EDDRSoftware/libdefsEval.git
$ cd libdefsEval
$ locate program_options.so
/usr/local/boost_1_64_0/stage/lib/libboost_program_options.so
$
Use your favorite editor and edit the lines pertaining to BOOST. These should start around line 34. The original looks like this:
BOOST_ROOT = /usr/local/boost_1_64_0
BOOST_LIB = $(BOOST_ROOT)/stage/lib
BOOST_INC = $(BOOST_ROOT)/boost
Note that the BOOST_ROOT should point to your version of boost. The locate statement from above should help you decipher where your BOOST_ROOT should point. If you have more than one version of the library listed from the locate statement, I would suggest using the newest version. This might require you to add or update a LD_LIBRARY_PATH environment variable to your system.
Once you have updated the BOOST_ROOT path in the Makefile, you should be able to run make.
$ make
g++ -o ./libdefseval main.cpp -I/usr/local/boost_1_64_0 -I/usr/local/boost_1_64_0/boost -L/usr/local/boost_1_64_0/stage/lib -lboost_program_options -lboost_filesystem -lboost_system
$ ls libdefseval
libdefseval
Congratulations! You have successfully built the application.
To run a test on the testData directory, just run...
$ make test2
LD_LIBRARY_PATH=/usr/local/boost_1_64_0/stage/lib ./libdefseval --def ./testData/lib.defs --libs --cells --views
def: ./testData/lib.defs
DEFINE: /home/username/Development/libdefsEval_orig/testData/lib.defs:2 "DEFINE my_lib $PWD/testData/library"
libPath: /home/username/Development/libdefsEval_orig/testData/library
libName: my_lib
cellName: cell1
viewName: layout
viewName: symbol
cellName: cell2
cellName: cell3
ERROR: Recursion in file => "/home/username/Development/libdefsEval_orig/testData/lib.defs" includes file => "/home/username/Development/libdefsEval_orig/testData/lib.defs" which references itself.
INVALID LINE: /home/username/Development/libdefsEval_orig/testData/lib.defs:4 => DEFINE test #This line is treated as an error to help debug.
ERROR: No such file or directory "/home/username/Development/libdefsEval_orig/testData/here"
INVALID LINE: "/home/username/Development/libdefsEval_orig/testData/lib.defs":5 => DEFINE missing_lib $PWD/testData/here
DEFINE: /home/username/Development/libdefsEval_orig/testData/lib.defs:6 "DEFINE dir_link_lib ./directory_link"
libPath: /home/username/Development/libdefsEval_orig/testData/library
libName: dir_link_lib
cellName: cell1
viewName: layout
viewName: symbol
cellName: cell2
cellName: cell3
INVALID LINE: /home/username/Development/libdefsEval_orig/testData/lib.defs:7 => INCLUDE #This line is treaded as an error to help debug.
ERROR: Recursion in file => "/home/username/Development/libdefsEval_orig/testData/lib.defs" includes file => "/home/username/Development/libdefsEval_orig/testData/lib.defs" which references itself.
DEFINE: /home/username/Development/libdefsEval_orig/testData/new_dir/symbol.inc:1 "DEFINE test_lib ../library"
libPath: /home/username/Development/libdefsEval_orig/testData/library
libName: test_lib
cellName: cell1
viewName: layout
viewName: symbol
cellName: cell2
cellName: cell3
ERROR: Path "/home/username/Development/libdefsEval_orig/testData/./broken_link" contains a broken symlink.
INVALID LINE: "/home/username/Development/libdefsEval_orig/testData/lib.defs":10 => DEFINE broken_lib ./broken_link
$
Notice that the ‘test2’ shows plenty of examples of failures. This is intended for the test. Also, note the first line of output has set the LD_LIBRARY_PATH to include the boost libraries needed during execution. LD_LIBRARY_PATH=/usr/local/boost_1_64_0/stage/lib You can also set these permanently by adding the line below to your ~/.bashrc file. Keep in mind that the path should be relevant to the location of the boost libraries on your machine.
export LD_LIBRARY_PATH=/usr/local/boost_1_64_0/stage/lib