Dear devs,
i have a question regarding the header file management in grass.
I'm implementing a new library in grass (gpde) and therefor i have created
new global header files.
AFAIK by default the global header files are located in grass6/include
and copied while the build process to $(GISBASE)/include/grass.
This has the side effect that the global header files are ignored by the
doxygen docu generation process of the grass libraries.
I would like to keep the global header files in the library directory, so they
can be included in the library doxygen documentation.
To assure the correct header file placement, the header files will be copied
from the library directory into the global header directories:
This entry in "grass6/lib/gpde/Makefile" will do the job:
#############################################
MODULE_TOPDIR = ../..
EXTRA_LIBS=$(GISLIB) $(G3DLIB)
LIB_NAME = $(GPDE_LIBNAME)
include $(MODULE_TOPDIR)/include/Make/Lib.make
include $(MODULE_TOPDIR)/include/Make/Doxygen.make
default: headers lib
headers:
for file in ./*.h ; do $(INSTALL_DATA) $$file ../../include/ ; done
for file in ./*.h ; do $(INSTALL_DATA) $$file $(GISBASE)/include/grass/ ;done
#doxygen:
DOXNAME=gpde
#############################################
If you think this approach is correct, i will move the gpde header files from
the include directory into the gpde library directory and modify the
Makefile.
Any suggestions are welcome.
Best regards
Soeren
Soeren Gebbert wrote:
i have a question regarding the header file management in grass.
I'm implementing a new library in grass (gpde) and therefor i have created
new global header files.
AFAIK by default the global header files are located in grass6/include
and copied while the build process to $(GISBASE)/include/grass.
This has the side effect that the global header files are ignored by the
doxygen docu generation process of the grass libraries.
I would like to keep the global header files in the library directory, so they
can be included in the library doxygen documentation.
To assure the correct header file placement, the header files will be copied
from the library directory into the global header directories:
This entry in "grass6/lib/gpde/Makefile" will do the job:
#############################################
MODULE_TOPDIR = ../..
EXTRA_LIBS=$(GISLIB) $(G3DLIB)
LIB_NAME = $(GPDE_LIBNAME)
include $(MODULE_TOPDIR)/include/Make/Lib.make
include $(MODULE_TOPDIR)/include/Make/Doxygen.make
default: headers lib
headers:
for file in ./*.h ; do $(INSTALL_DATA) $$file ../../include/ ; done
for file in ./*.h ; do $(INSTALL_DATA) $$file $(GISBASE)/include/grass/ ;done
#doxygen:
DOXNAME=gpde
#############################################
If you think this approach is correct, i will move the gpde header files from
the include directory into the gpde library directory and modify the
Makefile.
Makefiles should try to avoid modifying the source tree (i.e. creating
files outside of the dist.<arch> and various OBJ.<arch> directories).
Either store the headers in the top-level include directory (from
where they will be copied to $GISBASE/include/grass by lib/Makefile),
or store them in the lib/gpde directory and have lib/gpde/Makefile
copy them to $GISBASE/include/grass (but not to the top-level include
directory).
Amongst the potential issues, copying files from lib/gpde to include
will complicate "make clean" (lib/gpde/Makefile would need a custom
"clean" target to remove those files from the include directory). More
generally, every additional directory-specific mechanism risks
complicating future changes to the build system.
--
Glynn Clements <glynn@gclements.plus.com>