Skip to content

Latest commit

 

History

History
122 lines (88 loc) · 5 KB

CONTRIBUTING.md

File metadata and controls

122 lines (88 loc) · 5 KB

How to contribute to CPU-X

CPU-X is mainly developed by @TheTumultuousUnicornOfDarkness, but contributors are welcome!

Here is some things to be involved.

Translate

If you want to translate CPU-X in your native tongue, please visit the Weblate page.

Update databases

When new CPUs are out, we need to add them in databases. You can find databases here. Also, please note CPU codenames are defined in libcpuid.

Develop

CPU-X is written in C and uses the CMake build system.

First of all, if you are interested to modify CPU-X source code, take a look at how to manually build CPU-X.

Source files

The file structure in the src directory is the following:

  1. CPU-X core, where data are gathered:
    • core.c
    • core.h
    • cpu-x.h
    • daemon.c
    • daemon.h
    • databases.h
    • ipc.h
    • main.c
    • util.c
  2. External projects, modified to be integrated within CPU-X (optional):
    • bandwidth
    • dmidecode
  3. User interfaces (optional):
    • gui_gtk.c
    • gui_gtk.h
    • gui_gtk_id.h
    • tui_ncurses.c
    • tui_ncurses.h

Add new labels

Adding new labels to CPU-X is a little bit complex, but don't worry: this sub-section explains how to achieve that.
This text is based on this commit.
⚠️ Note: this guide does not explain how to add a new tab.

1. In core

  • First of all, you need to add a new constant value in the appropriate enumerated type in cpu-x.h file; look for something starting with enum EnTabTAB. Keep the LASTTAB value add the end. In this example, TAB is the tab name and NEWLABEL is the constant value for the new label.
  • Set the label name in main.c, inside the labels_setname() function:
    asprintf(&data->tab_TAB[NAME][NEWLABEL], _("Label name"));
  • Set the label value in core.c, in the appropriate function:
    casprintf(&data->tab_TAB[VALUE][NEWLABEL], true or false, "%s", XXX);
    💡 fill_labels() and do_refresh() are the calling functions.

2. In NCurses TUI

You may need to adapt tui_ncurses.c. To print text on screen, mvwprintwc() and mvwprintw2c() functions are used.

If your label has a dynamic value (e.g. which change over time), also you need to adapt nrefresh() function.

3. In GTK+ 3 GUI

You need to use Glade to edit UI. The UI file in under data/ (e.g. cpu-x-gtk-3.12.ui).

Two labels must be created at least:

  • one label to display the label name, with an ID like TAB_labNEWLABEL ;
  • a second label to display the label value, with an ID like TAB_valNEWLABEL.

On top of that, you need to declare these ID inside gui_gtk_id.h, in the appropriate array.
⚠️ Please respect the same order as the corresponding enumerated type in cpu-x.h.

Then labels are filled from gui_gtk.c file, by using gtk_label_set_text() function.
You may need to adapt get_widgets(), set_labels() and grefresh() functions.

4. Verify

Build and run CPU-X. The software must not crash or freeze after these changes.

Please check all modes to avoid potential regressions:

$ cpu-x -Dv
$ cpu-x -Nv
$ cpu-x -Gv

If nothing is broken, congratulations! 🎉 You can open a new pull request.

Add new options

This section describe how to add a new option. You can take a look on this commit.

  1. src/cpu-x.h: add new option in struct Options
  2. src/main.c:
    • in main(): initialize default value in opts = &(Options)
    • in struct cpux_options[]: add a new line entry
    • in parse_arguments(): retrieve value for option
  3. data/org.cpu-x.gschema.xml: add a new key
  4. data/cpu-x-gtk-3.12.ui: open UI file in Glade and change Settings window
  5. src/gui_gtk.h: add a new GtkWidget in struct GtkLabels
  6. src/gui_gtk.c:
    • get_widgets(): map widget
    • load_settings(): map setting to option
    • start_gui_gtk(): bind setting to widget
  7. Do something with your new option!

Things to do

  • A good starting point if you want to do stuff is to fix issues. One example: add proper CPU logos (as requested in #144).

  • Another point, if you have a lot of time to spare, is to create new user interfaces:

    • Qt5 GUI can be appreciated by users using Qt-based desktop environnement (like KDE);
    • Cocoa GUI to port CPU-X on macOS (read #147, #56, #55 #35 and #33 for more details).
  • Also, feel free to improve existing stuff. For instance, databases are defined in a C header, but maybe there are better ways to store data.