Share by linking to this project from your forum, blog or Twitter. Link to commits, issues or source files, or whatever else you find worthy to pass to someone. This is the easiest, most useful and self-updating way of referring to this project. It's also the best form of crediting and appreciating this work without donating or participating directly.
Examples:
- commit
- commit - specific file
- issue
- issue comment
- source file
- source file - specific revision (more information here)
- source line
- source section
- source directory
- source - specific revision
- source - specific revision .zip archive
-
You can give feedback/suggestions by submitting an issue.
-
Submit a patch:
- Fork the repository
- Create a branch:
git switch -c mypatch
orgit checkout -b mypatch
(for Git 2.22.x and earlier) - Do commit pre-check and new log entry:
hbrun bin/commit
- Commit your changes:
git commit -am "Add this feature to that module"
- Push to the branch:
git push origin mypatch
- Open a Pull Request
-
Make sure to use the same coding/formatting style as you find in the files you're updating. The easiest way to achieve this is to use these commands to format the sources (use this with care - most sources are well-formatted, so make sure to only apply it to newly added or updated code sections)
$ uncrustify -c <harbour-dir>/bin/harbour.ucf <source{.c|.h}> $ <harbour-dir>/bin/hbformat <source{.prg|.hb|.ch}>
-
Text editor setting for Harbour files
-
In the rare case you need to send something large (> 100 kB), use this free service.
-
See this good guideline on how to contribute: https://github.com/necolas/issue-guidelines/blob/master/CONTRIBUTING.md
-
And these:
-
If looking for known pending issues to work on, look for
TODO
andFIXME
markers in the source code/ChangeLog or see this list of issues that need further input/contribution:
Evaluate these points before reporting an issue:
-
Make sure to do a
make clean
before doing a build after refreshing the sources. -
If that still fails, make sure to install fresh source tree in a new local directory and start over. See How to Get for instructions to get the source. In case you installed Harbour into system locations (this used to be the case with some *nix users, albeit mostly unnecessarily or wrongly - e.g. for unstable versions), you will need to remember cleaning off Harbour from these locations, too. Hint: Never install unstable Harbour versions to system locations.
-
If you are doing a cross-build, make sure to have rebuilt the native Harbour executables for your host platform. See
HB_HOST_BIN
build messages to find their location. -
Keep your
PATH
clean from old, mixed compiler tools or other Harbour versions when building Harbour. The surest way to achieve this is to leave only the C compiler directory inPATH
:set PATH=C:\<c-compiler-bin-dir>
If you use Harbour official binary distro on Windows, even above is unnecessary, so avoid it.
-
Remove all old, unnecessary environment variables (for both Harbour and C compiler) from your environment. Also remove any custom settings for your C compiler. Use only those documented in this file.
-
Remove any Harbour build settings documented in Build Options.
-
Do no or only minor updates at once to the examples included in Build Examples. If it doesn't work, fall back to documented examples as is.
-
If everything fails and you are to report a build problem to Harbour developers, make sure to include your OS version/language/CPU architecture, Harbour revision, C compiler name/release and version, environment variables and verbose log output containing both STDERR and STDOUT in one combined stream (use
make > log.txt 2>&1
). Enable verbose mode usingHB_BUILD_VERBOSE=yes
and do not enable multi-threaded (parallel) build. Configure your tools to output English language messages usingHB_LANG=en
andLANG=en_GB.UTF-8
. Complete log output is rarely necessary, but make sure to include the top of the output (lines starting with!
) and the area where problematic behavior occurred first. Make sure to not only include a link failure or a make tool failure, as it's most often not enough information. Compress your log using zip if it is larger than 25 kB (use the extension.zip
). With these, you have much better chance to get useful or any response. -
Do not alter the directory layout and files in Harbour and 3rd party packages and tools (including C compilers).
-
If you are to report a build problem with a Harbour application, all the above points apply, plus make sure to use
hbmk2
with the-trace
command-line option and redirect its output to a file (see above how). Also include your full command-line and any referenced build script in your report. It is good idea to first remove all manual references to Harbour core components from make-files and custom environment. E.g. it's common mistake to add C compiler header and/or lib dirs, Harbour core header and/or lib dirs, built-in constants to make-files or environment. No such thing is necessary as these are automatically handled byhbmk2
. In other words: start simple and don't be over-busy with fine-tuning your configuration. If you need to, the problem is most probably elsewhere. It's also good idea to try with the latest Harbour revision or Harbour's mainline branch first. -
If you are to report a problem with Harbour itself, include self-contained, minimal source code example. Do not use
xhb
contrib library (includinghbcompat.ch
), nor any 3rd party Harbour libraries. The example should reproduce the problem using the latest Harbour revision (with no local commits or pending local updates) at the time of the report. Do not post links to executables and other binary files. If your source contains non-ASCII and non-UTF-8 national, accented, special chars, make sure to mark the codepage/encoding used and useChr()
/hb_BCode()
calls to form the strings. Use UTF-8 if possible. Notice that core developers are likely to run code examples ashbrun
scripts for testing, so it's a good idea to make them work this way.
Also make sure not to report multiple issues under a single GitHub Issue.- More on self-contained examples: https://en.wikipedia.org/wiki/Minimal_working_example
- More on how to report issues in an effective and useful way: https://www.chiark.greenend.org.uk/~sgtatham/bugs.html
- "How To Ask Questions The Smart Way" article by Eric S. Raymond: http://catb.org/~esr/faqs/smart-questions.html
- "How to Ask Good Questions" by Julia Evans https://jvns.ca/blog/good-questions/
- "Question Checklist" by Jon Skeet https://codeblog.jonskeet.uk/2012/11/24/stack-overflow-question-checklist/
- "Does Not Work" https://web.archive.org/web/20180124130721/importblogkit.com/2015/07/does-not-work/
- "The XY Problem" https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378
-
Please do not report warnings or bugs — except build errors — in 3rd party components hosted inside the Harbour source tree. You can recognize these by their source path, which always contain a subdirectory named
/3rd/
. Report these directly to the maintainer of the respective component instead. -
If your example or report contains human readable text, use English only.
-
If your example involves compatibility components, make sure to test it against original implementation (e.g. legacy Cl*pper core language elements against real CA-Cl*pper 5.2e or 5.3b, or
hbct
functions against CT3 library, etc.) Notice that Harbour is Cl*pper Summer '87 compatible exactly as much as Cl*pper 5.2e/5.3b is, meaning: almost, but not completely. For tests with Cl*pper, use this free, open-source MS-DOS emulator (requires Windows/Wine).