* [[MateuszPiotrowski/Ports/Workshops/201802|201802]]
* [[MateuszPiotrowski/Ports/Workshops/Preparation|Preparation]]
====== FreBSD Ports workshops ======
===== Documentation =====
* [[https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/book.html|FreeBSD Porter's Handbook]], especially:
* [[https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/book.html#quick-porting|Chapter 3. Quick Porting]]
* [[https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/book.html#makefile-master_sites-github|Porting software hosted on GitHub]]
* [[https://web.archive.org/web/20180218130952/https://bitbucket.org/koobs/ports/src/d8b06010c54f2f7e9465f999ce8aa985f5fd3410/README.md|FreeBSD Ports: New Contributors 101 (by Kubilay Kocak) (archive.org alternative)]]
* Submitting patches and new ports to [[https://bugs.freebsd.org/|FreeBSD Bugzilla]]:
* [[Bugzilla/ThePerfectPortsIssue]]
* [[Bugzilla/DosAndDonts]]
===== Outlines of suggested workflows =====
//General instructions on how you can start hacking on the %%FreeBSD%% Ports.//
==== Creating a new port ====
- Prepare your environment.
- Create a new directory for your new port somewhere. For example in your home directory.
mkdir ~/newport
- Go to the ''%%newport%%'' directory and create a ''%%Makefile%%'' there.
cd ~/newport
touch Makefile
- See [[https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/book.html#quick-porting|FreeBSD Porter's Handbook: Chapter 3. Quick Porting]] and try to work on your ''%%Makefile%%'' as much as you can.
- Let's try to build and install the new port. Normally, it is done by running ''%%make install%%'' inside the port's directory. For development purposes it might be easier to run every command involved in the process manually.
- Run
make fetch
Troubleshooting:
* You might need to become a root to do this. By default, the archives with source code are downloaded to ''%%/usr/ports/distfiles/%%'', which can only be modified by root. Solution: ''%%sudo make fetch%%''.
* If you've not created a ''%%distinfo%%'' file it might be a good moment to do it. Otherwise, ''%%make fetch%%'' will likely fail. See [[https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/book.html#porting-checksum|FreeBSD Porter's Handbook: 3.3. Creating the Checksum File]].
- Run
make extract
- Run
make build
* Make sure that at this point you've already created a ''%%pkg-plist%%'' file or defined a ''%%PLIST_FILES%%'' variable in ''%%Makefile%%''. See [[https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/book.html#porting-desc|FreeBSD Porter's Handbook: 3.2. Writing the Description Files]].
- Run
make install
* You might need to become a root to do this. Solution: ''%%sudo make install%%''.
- At this point you've managed to build and install that new port on the system. It is time to clean up the files you've created and do some testing.
- Run
portlint
Fix everything this tool complains about.
* Install ''%%portlint%%'' first with ''%%pkg install portlint%%''.
- Run
port test
Fix everything this tool complains about.
* Install ''%%port%%'' first with ''%%pkg install porttools%%''.
==== Updating a port ====
:!: TODO
===== Simple tasks and issues for first timers =====
* Make sure //MASTER_SITES// aliases are being used instead of hard-coded URLs.
* Make sure that optimized //CFLAGS// and //CPPFLAGS// use the same variable irregardless of a port.
* [[Ports/LongtermTargets]]
==== Ideas for (potentially) fun ports contributions ====
^ New ports ^^^
| [[http://abricotine.brrd.fr/|Abricotine]] | Open-source markdown editor built for desktop. | |
| [[https://github.com/arescentral/antares|Antares]] | Tactical space combat game. | |
| [[https://github.com/beakerbrowser/beaker|Beaker]] | Peer-to-peer Web browser. | |
| [[https://github.com/communi/communi-desktop|Communi]] | IRC client for desktop environments. | |
| [[https://github.com/chriswolfvision/eplot|eplot]] | Ruby script which allows to pipe data easily through gnuplot and create plots quickly, which can be saved in %%PostScript%%, PDF, PNG or EMF files. | |
| [[https://github.com/Roger/escrotum|escrotum]] | Screen capture using pygtk, inspired by scrot. | |
| [[https://github.com/sharkdp/hyperfine|hyperfine]] | Command-line benchmarking tool. | |
| [[https://github.com/modernish/modernish|modernish]] | Cross-platform POSIX shell feature detection and language extension library. | |
| [[https://github.com/PowerShell/PowerShell|PowerShell]] | Task-based command-line shell and scripting language built on the .NET Framework to help IT professionals control and automate the administration of MS-Windows and (now) other platforms. | |
| [[https://web.archive.org/web/20180613031926/https://github.com/t6/progress|progress(1) from NetBSD (archive.org alternative)]] | Feed input to a command, displaying a progress bar. | |
| [[http://pytorch.org/|PyTorch]] | Tensors and dynamic neural networks in Python with strong GPU acceleration. | :( The [[MateuszPiotrowski/Ports/Workshops/201802]] workshop participants started to work on this port but it turned out to be a little bit too big to fit in one workshop. |
| ::: | Although CUDA is not supported on %%FreeBSD%% it might be nice to have at least some of the %%PyTorch%% functionalities available on %%FreeBSD%%. | ::: |
| [[https://tools.suckless.org/quark/|quark]] | Extremely small and simple HTTP GET-only web server. It only serves static pages on a single host. | ;) The participants of the [[MateuszPiotrowski/Ports/Workshops/201802]] workshop have managed to successfully port this software. [[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=226226|See the port submission on FreeBSD Bugzilla.]] |
| [[https://github.com/radude/rentry|rentry]] | Markdown pastebin from command line. | |
| [[http://git.codemadness.nl/saait/file/README.html|saait]] | Static site generator in C. | |
| [[https://github.com/merrychap/shellen|shellen]] | Interactive shellcoding environment to easily craft shellcodes. | |
| [[https://github.com/anordal/shellharden|shellharden]] | Corrective Bash syntax highlighter. | |
| [[https://git.suckless.org/slstatus|slstatus]] | Suckless status monitor for window managers that use ''%%WM_NAME%%'' (e.g. [[https://www.freshports.org/x11-wm/dwm/|dwm]]) or stdin to fill the status bar. | |
| [[http://st.suckless.org/|st]] | Simple terminal from [[https://suckless.org]]. | |
| ::: | There already exists a port of st ([[https://www.freshports.org/x11/sterm/|x11/sterm]]) but its version is 0.7, which is the latest release. It'd be nice to have a port of the bleeding-edge version of st. | ::: |
| ::: | When x11/sterm-devel is ready then the next goal might adding some of [[https://st.suckless.org/patches/|the community patches]] as port options. For example: [[https://st.suckless.org/patches/scrollback/|scrollback]], [[https://st.suckless.org/patches/right_click_to_plumb/|right click to plumb]]. | ::: |
| [[https://github.com/magicalraccoon/tootstream|tootstream]] | Command line interface for interacting with Mastodon instances. | |
| [[https://github.com/whohas/whohas|whohas]] | Command line tool that allows querying several package lists at once written in Perl. | |
| [[https://github.com/cknadler/vim-anywhere|vim-anywhere]] | Integrate Vim editing capabilities into any text buffer | |
| [[https://github.com/antonblanchard/will-it-scale|Will It Scale]] | Benchmark utility which takes a testcase and runs it from 1 through to n parallel copies to see if the testcase. | |
| ::: | There is a %%NetBSD%% port, which might be helpful. Ping [[/MateuszPiotrowski|MateuszPiotrowski]] for details. | ::: |
| ::: | [[/MateuszGuzik]] is using it for benchmarking. He might have some patches laying aroud. | ::: |
| [[https://github.com/mchav/with|with]] | Command prefixing for continuous workflow using a single tool. | ;) The participants of the [[MateuszPiotrowski/Ports/Workshops/201802]] workshop have managed to successfully port this software. [[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=226407|See the port submission on FreeBSD Bugzilla.]] |
^ New features and modifications ^^^
| [[https://www-user.tu-chemnitz.de/~fri/ding/|Ding]] | Dictionary lookup program. | |
| ::: | Add [[https://github.com/jan-Lope/Toki_Pona_lessons_English/blob/gh-pages/toki-pona_english.txt|a toki pona dictionary]] to the existing [[https://www.freshports.org/german/ding|german/ding]] port. | ::: |
| ::: | The license set in the german/ding Makefile is not 100% correct. Fix it. | ::: |
| [[https://dwm.suckless.org/|dwm]] | It might be fun to make port options from [[https://dwm.suckless.org/patches/|some of the patches]]: [[https://dwm.suckless.org/patches/noborder/|noborder]], [[https://dwm.suckless.org/patches/fakefullscreen/|fakefullscreen]]. | |
| [[https://www.freshports.org/graphics/intel-backlight/|intel-backlight]] | The task is to get interesting commits from the [[https://github.com/jcs/intel_backlight_fbsd|jcs's fork of intel-backlight]], send a PR with to [[https://github.com/FreeBSDDesktop/intel_backlight_fbsd|upstream]] and then submit an update to the intel-backlight port itself. | |
| [[https://www.freshports.org/games/jfsw/|JonoF's Shadow Warrior]] | Jonathon Fowler's port of the 3D Realms game "Shadow Warrior". | <:( As of the [[MateuszPiotrowski/Ports/Workshops/201802]] workshop, the game does not start. It is probably related to the fact that you need to obtain a couple of extra files to run this game (namely, ''%%sw.grp%%'' and ''%%sw.rts%%'') |
==== Other ports-related TODO lists ====
* [[Ports/ToDo]]
* [[https://portscout.freebsd.org/|portscout - FreeBSD Ports distfile Scanner]]
* [[/WantedPorts]]
* [[Ports/NewCategories/education|List of software that could be ported to help create an education category in Ports, which does not exist yet.]]
----
{{tag>Community HowTo Ports}}