This document is a quick overview of building and configuring drivers from the perspective of what system files have to be modified. (For actual details about how to construct a new device driver read the source for some of the drivers in plplot/drivers. For some additional details about the core paging and familying code see ../src/README.pages. Finally, there are several useful sections in the DocBook documentation [see, for example, "Output Devices" and "Driver Functions" in Chapter 3] that you should look at.) The following are some short notes on what PLplot source tree files need to be added or modified in order to add a device (which we'll call ) to a device driver (which we'll call ). The following PLplot source-tree files are affected: 1. drivers/.driver_info.in 2. cmake/modules/drivers-init.cmake 3. include/drivers.h 4. include/plDevs.h.in 5. include/plcore.h 6. plplot-test/plplot-test.sh.in 7. examples/plplot_configure.cmake_installed_examples.in 8. include/pldll.h.in 1. Add a line to drivers/.driver_info.in consisting of the following colon-separated fields: ::::: This should be the exact duplicate of the corresponding entry in the driver source code for plD_DEVICE_INFO_. MAINTENANCE (2018-08-24): To check the consistency of these results I used the following commands (under Linux) to collect these data in two different ways in order of device number (to make sure those are unique): cat *.driver_info.in |sort -n --field-separator=":" --key=5 >| /tmp/sorted_drivers.1 grep '"[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*' * |grep -vE 'README|txt' |cut --delimiter='"' --fields=2 |grep -v '%d' |sed -e 's?\\n??' |sort -u -n --field-separator=":" --key=5 >| /tmp/sorted_drivers.2 (The grep -vE 'README|txt' pipeline stanza gets rid of non source-code files that match this colon pattern. The grep -v '%d' stanza gets rid of a printf line that matches this colon pattern. The -u option on the sort command is used to eliminate duplicates created by the deprecated version of the wxwidgets device driver.) diffing the two results shows there is the stanza wxpng:wxWidgets PNG Driver:0:wxwidgets:52:wxpng in the driver code that is not replicated in the relevant *.driver_info.in file, but this is a well-known case of a disabled device so this difference is not significant. Furthermore, checking the sorted device numbers in /tmp/sorted_drivers.1 (or /tmp/sorted_drivers.2) shows they are strictly ascending, i.e., unique as of the above maintenence date. 2. Add the following line to cmake/modules/drivers-init.cmake in set(DRIVERS_DEVICE_LIST... "::ON::" where that file documents how the last two fields should be set depending on the characteristics of the device you are adding. 3. Add the following line to include/drivers.h: PLDLLIMPEXP_DRIVER void plD_dispatch_init_ ( PLDispatchTable *pdt ); 4. Add the following line to include/plDevs.h.in #cmakedefine PLD_ 5. Add the following 3 lines to include/plcore.h: #if defined(PLD_) && !defined(ENABLE_DYNDRIVERS) plD_dispatch_init_, #endif 6. For each interactive and file device of the driver add the following line to plplot_test/plplot-test.sh.in: PLD_=@PLD_@ Note, that the interactive and file devices are dealt with in separate places in that script so be careful where you put the above change. 7. Add the following line to examples/plplot_configure.cmake_installed_examples.in: set(PLD_ @PLD_@) 8. For dynamic drivers (the most likely situation), add _EXPORTS to the #ifdef ENABLE_DYNDRIVERS statement of include/pldll.h.in If the driver requires additional additional files or external libraries for compiling and linking then you should add a file called .cmake to cmake/modules and add a call to this file in the file cmake/modules/drivers.cmake (include()). The file .cmake should consist of cmake instructions for finding and the files and libraries and setting the appropriate environment variables (PLD_, _COMPILE_FLAGS and _LINK_FLAGS). The code for the driver itself should be in a file called .c or .cpp in the drivers directory.