OS/2, eCS & ArcaOS - Technical > Programming
Newbie guide to porting software?
jailbird:
So I went from being a mostly DOS user to about 30 years of using various flavors of *IX. I'm now playing around with ArcaOS finally. At my $DAYJOB I build a lot of RPM packages (for Linux), so I figured why not try and build some on OS/2 too!
So far, I'm mostly failing though, and I haven't even made it to the .rpm part yet :).
My first attempt was lftp, since the built-in ftp.exe is pretty lacking and the version of NcFTP in the yum repo is pretty old. I managed to get lftp to build, but it has 2 major issues so far: 1) It can't find local files at all (I'm guessing due to / vs \ ?) and 2) The password prompt is echoing the password.
My second attempt was some flavor of vi. I know there are some old versions of vim floating around, but I figured I'd give something a shot. I figured vim was too much to start with, so I started with nvi. The original version of nvi had a pretty old build system and nvi2 seems to have a lot of BSD-specific things, so I tried elvis. Elvis seems to have some OS/2 support, but that support was originally compiled with IBM VisualAge C++ 3.0. So I attempted to just use the POSIX (UNIX) code with gcc and ncurses. That compiled fine and it runs, but when I move around with the h/j/k/l keys, those keys keep printing (eg, it'll print "jjjj") until I hit enter, and then the enter will repaint the screen and get rid of the "j"s. I tried modifying the code to force repaints after every key, but no luck quite yet.
So I'm hoping that these issues are common ones that others have ran into and that maybe it's something that we can put on Wiki somewhere?
To start out with, I had taken some info that I found on these forums and then modified it until I got things mostly working. Most of the posts here assume "ash", but I'm currently using "mksh" as I much prefer it (but I've tried ash too!). My workflow so far is basically:
C:\> mksh
$ . ./os2.txt
$ mkdir project/build
$ cd project/build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make
Where os2.txt contains:
export LDFLAGS="-Zomf -Zhigh-mem -Zmap -Zbin-files -Zargs-wild -Zargs-resp"
export CFLAGS="-O2 -g -march=pentium4 -pipe"
export CXXFLAGS="-O2 -g -march=pentium4 -pipe"
export LIBS="-lcx"
export CC=gcc
export CXX=g++
export CPP=cpp
export CXXCPP=cpp
export LD=wl
export AR=emxomfld
export exeext=.exe
export SH=/usr/bin/mksh
export SHELL=/usr/bin/mksh
export CONFIG_SHELL=/usr/bin/mksh
export POSIX_SHELL=/usr/bin/mksh
export PREFERABLY_POSIX_SHELL=/usr/bin/mksh
export PATH="C:/USR/SBIN;C:/USR/BIN"
(SH/CONFIG_SHELL/POSIX_SHELL/PREFERABLY_POSIX_SHELL is for autoconf projects)
Dave Yeo:
Well first I see these that need fixed, fixed exports below,
--- Code: ---export LD=emxomfld
export AR=emxomfar
export RANLIB=echo
--- End code ---
The PATH is pretty short too, should have /@unixroot/usr/libexec/bin in the front. They're programs that also have OS/2 equivalents. You still might need something else on the PATH, might be best to just drop it.
You're also missing export MAKESHELL
But the real problem is that our libc is lacking in term support, which is why you're having problems.
Dave Yeo:
Actually, looking again, the export AR and export RANLIB lines shouldn't be there as you don't have -Zomf in your CFLAGS and/or CXXFLAGS, which is probably for the best.
I'd also suggest adding -mtune=generic and removing -pipe to your CFLAGS/CXXFLAGS. The -mtune=generic will produce better code for everything besides actual Pentium 4 and -pipe can cause problems
Note also that if try to build something with the autotools, they should be rebuilt with autoreconf -sfi to get OS/2 versions of configure and libtool
jailbird:
Ah-ha! Thanks
I think I had RANLIB=echo at one point but ran into problems with it. Probably because I didn't have LD/AR set correctly? Thanks for the pointers.
Same with PATH, using the stock PATH I was running into some weird issues, so I went minimal. I'll try again. Thanks for the pointers!
jailbird:
Trying to debug the lftp issue with it not finding local files. What's the way to see what calls the application is making without resorting to gdb? Eg, something like strace on Linux, or truss on Solaris, or ktrace on BSD, or dtruss on macOS, or... :)
Navigation
[0] Message Index
[#] Next page
Go to full version