ہائیکو کے ساتھ میرا پانچواں دن: آئیے کچھ پروگرام پورٹ کرتے ہیں۔

ہائیکو کے ساتھ میرا پانچواں دن: آئیے کچھ پروگرام پورٹ کرتے ہیں۔

TL؛ ڈاکٹر: ایک نوزائیدہ نے پہلی بار ہائیکو کو دیکھا، جو لینکس کی دنیا سے کچھ پروگراموں کو پورٹ کرنے کی کوشش کر رہا تھا۔

ہائیکو کے ساتھ میرا پانچواں دن: آئیے کچھ پروگرام پورٹ کرتے ہیں۔
میرا پہلا ہائیکو پورٹڈ پروگرام، اس کے hpkg فارمیٹ میں پیک کیا گیا ہے۔

حال ہی میں میں نے ہائیکو دریافت کیا، جو پی سی کے لیے حیرت انگیز طور پر اچھا آپریٹنگ سسٹم ہے۔
آج میں اس آپریٹنگ سسٹم میں نئے پروگراموں کو پورٹ کرنے کا طریقہ سیکھوں گا۔ مرکزی توجہ ایک لینکس ڈویلپر کے نقطہ نظر سے ہائیکو پر سوئچ کرنے کے پہلے تجربے کی وضاحت ہے۔ راستے میں میری کسی احمقانہ غلطی کے لیے معذرت خواہ ہوں، کیونکہ ہائیکو کو پہلی بار ڈاؤن لوڈ کیے ہوئے ایک ہفتہ بھی نہیں گزرا ہے۔

میں تین مقاصد حاصل کرنا چاہتا ہوں:

  • ایک سادہ سی ایل آئی ایپلیکیشن کو پورٹ کریں۔
  • درخواست کو GUI سے Qt میں پورٹ کریں۔
  • پھر انہیں hpkg فارمیٹ میں پیک کریں (چونکہ میں اب بھی AppDir اور AppImage کو ہائیکو کے لیے ڈھالنے کے بارے میں سوچ رہا ہوں...)

آو شروع کریں. حصوں میں دستاویزات и ترقیاس کے ساتھ ساتھ وکیپیڈیا ہائیکو پورٹس سے مجھے صحیح سمت ملی۔ یہاں تک کہ ایک آن لائن پی ڈی ایف بک بھی ہے۔ BeOS: یونکس ایپلیکیشن کو پورٹ کرنا.
467 صفحات - اور یہ 1997 کا ہے! اندر دیکھنا خوفناک ہے، لیکن مجھے بہترین کی امید ہے۔ ڈویلپر کے الفاظ حوصلہ افزا ہیں: "اس میں کافی وقت لگا کیونکہ BeOS POSIX کے مطابق نہیں تھا،" لیکن ہائیکو "زیادہ تر حصے کے لیے" پہلے سے ہی ایسا ہے۔

ایک سادہ سی ایل آئی ایپلیکیشن کو پورٹ کرنا

پہلا خیال ایپلی کیشن کو پورٹ کرنے کا تھا۔ avrdude، لیکن، جیسا کہ یہ نکلا، یہ پہلے ہی ہے۔ کیا ہے ایک طویل وقت پہلے.

پہلی کوشش: دیکھنے کے لیے کچھ نہیں۔

جو میں سمجھ نہیں سکتا وہ پہلے ہی ہے۔ ایپس کو 10 سالوں سے ہائیکو میں پورٹ کیا گیا ہے۔ - اس حقیقت کے باوجود کہ OS خود ابھی تک ورژن 1.0 بھی نہیں ہے۔

دوسری کوشش: دوبارہ لکھنے کی ضرورت ہے۔

تو میں استعمال کروں گا۔ ptouch-770, برادر P-Touch 770 پرنٹر کو کنٹرول کرنے کے لیے CLI جسے میں لیبل پرنٹ کرنے کے لیے استعمال کرتا ہوں۔
میں اس پر مختلف لیبل پرنٹ کرتا ہوں، اور ہوسکتا ہے کہ آپ اسے پچھلے مضمون میں دیکھ چکے ہوں۔ تھوڑا پہلے، میں نے Python میں ایک چھوٹا GUI ریپر پروگرام لکھا تھا (چونکہ یہ Gtk+ میں ہے، اس لیے اسے دوبارہ لکھنا پڑے گا، اور یہ سیکھنے کی ایک اچھی وجہ ہے)۔

ہائیکو کے ساتھ میرا پانچواں دن: آئیے کچھ پروگرام پورٹ کرتے ہیں۔
بھائی P-Touch 770 لیبل پرنٹر کیا یہ ہائیکو کے ساتھ کام کرے گا؟

ہائیکو پیکج مینیجر لائبریریوں اور کمانڈز کے بارے میں جانتا ہے، اس لیے اگر چلتے وقت مجھے "libintl نہیں مل سکتا" کا پیغام ملتا ہے۔ configure - میں ابھی لانچ کرتا ہوں۔ pkgman install devel:libintl اور مطلوبہ پیکج مل جائے گا۔ اسی طرح pkgman install cmd:rsync. ٹھیک ہے، وغیرہ

سوائے اس کے جب یہ کام نہیں کرتا:

/Haiku/home> git clone https://github.com/probonopd/ptouch-770
Cloning into 'ptouch-770'...
remote: Enumerating objects: 134, done.
remote: Total 134 (delta 0), reused 0 (delta 0), pack-reused 134
Receiving objects: 100% (134/134), 98.91 KiB | 637.00 KiB/s, done.
Resolving deltas: 100% (71/71), done./Haiku/home> cd ptouch-770//Haiku/home/ptouch-770> make
gcc -Wall -O2 -c -o ptouch-770-write.o ptouch-770-write.c
ptouch-770-write.c:28:10: fatal error: libudev.h: No such file or directory
 #include <libudev.h>
          ^~~~~~~~~~~
compilation terminated.
Makefile:16: recipe for target 'ptouch-770-write.o' failed
make: *** [ptouch-770-write.o] Error 1/Haiku/home/ptouch-770> pkgman install devel:libudev
100% repochecksum-1 [65 bytes]
Validating checksum for Haiku...done.
100% repochecksum-1 [64 bytes]
Validating checksum for HaikuPorts...done.
*** Failed to find a match for "devel:libudev": Name not found/Haiku/home/ptouch-770> pkgman install devel:udev
100% repochecksum-1 [65 bytes]
Validating checksum for Haiku...done.
100% repochecksum-1 [64 bytes]
Validating checksum for HaikuPorts...done.
*** Failed to find a match for "devel:udev": Name not found

شاید udev بہت زیادہ لینکس پر مبنی ہے اور اس لیے ہائیکو کے لیے موجود نہیں ہے۔ جس کا مطلب ہے کہ مجھے اس سورس کوڈ میں ترمیم کرنے کی ضرورت ہے جسے میں مرتب کرنے کی کوشش کر رہا ہوں۔
اوہ، آپ اپنے سر سے کود نہیں سکتے، اور مجھے یہ بھی نہیں معلوم کہ کہاں سے شروع کرنا ہے۔

تیسری کوشش

یہ ہونا اچھا ہوگا۔ tmate ہائیکو کے لیے، پھر میں ہائیکو ڈویلپرز کو اپنے ٹرمینل سیشن سے منسلک ہونے کی اجازت دوں گا - اگر کچھ غلط ہو جاتا ہے۔ ہدایات کافی آسان ہیں:

./autogen.sh
./configure
make
make install

اچھا لگتا ہے، تو کیوں نہ اسے ہائیکو پر آزمایا جائے؟

/Haiku/home> git clone https://github.com/tmate-io/tmate/Haiku/home> cd tmate//Haiku/home/tmate> ./autogen.sh
(...)/Haiku/home/tmate> ./configure
(...)
checking for libevent... no
checking for library containing event_init... no
configure: error: "libevent not found"/Haiku/home/tmate> pkgman install devel:libevent
(...)
The following changes will be made:
  in system:
    install package libevent21-2.1.8-2 from repository HaikuPorts
    install package libevent21_devel-2.1.8-2 from repository HaikuPorts
Continue? [yes/no] (yes) :
100% libevent21-2.1.8-2-x86_64.hpkg [965.22 KiB]
(...)
[system] Done.checking for ncurses... no
checking for library containing setupterm... no
configure: error: "curses not found"/Haiku/home/tmate> pkgman install devel:libcurses
(...)
*** Failed to find a match for "devel:libcurses": Name not found/Haiku/home/tmate> pkgman install devel:curses
(...)
*** Failed to find a match for "devel:curses": Name not found

اس مرحلے میں میں HaikuDepot کھولتا ہوں اور تلاش کرتا ہوں۔ curses.
کچھ پایا گیا، جس نے مجھے زیادہ قابل استفسار کے لیے اشارہ دیا:

/Haiku/home/tmate> pkgman install devel:libncurses
(...)
100% ncurses6_devel-6.1-1-x86_64.hpkg [835.62 KiB]
(...)./configure
(...)
checking for msgpack >= 1.1.0... no
configure: error: "msgpack >= 1.1.0 not found"/Haiku/home/tmate> pkgman install devel:msgpack
(...)
*** Failed to find a match for "devel:msgpack": Name not found/Haiku/home/tmate> pkgman install devel:libmsgpack
(...)
*** Failed to find a match for "devel:libmsgpack": Name not found

میں ایک بار پھر ہائیکو ڈیپو گیا، اور یقیناً مل گیا۔ devel:msgpack_c_cpp_devel. یہ کیا عجیب نام ہیں؟

/Haiku/home/tmate> pkgman install devel:msgpack_c_cpp_devel
100% repochecksum-1 [65 bytes]
Validating checksum for Haiku...done.
100% repochecksum-1 [64 bytes]
Validating checksum for HaikuPorts...done.
*** Failed to find a match for "devel:msgpack_c_cpp_devel": Name not found# Why is it not finding it? To hell with the "devel:".../Haiku/home/tmate> pkgman install msgpack_c_cpp_devel
(...)
The following changes will be made:
  in system:
    install package msgpack_c_cpp-3.1.1-1 from repository HaikuPorts
    install package msgpack_c_cpp_devel-3.1.1-1 from repository HaikuPorts
Continue? [yes/no] (yes) :
(...)/Haiku/home/tmate> ./configure
(...)
checking for libssh >= 0.8.4... no
configure: error: "libssh >= 0.8.4 not found"/Haiku/home/tmate> pkgman install devel:libssh/Haiku/home/tmate> make
(...)
In file included from /boot/system/develop/headers/msgpack.h:22,
                 from tmate.h:5,
                 from cfg.c:29:
/boot/system/develop/headers/msgpack/vrefbuffer.h:19:8: error: redefinition of struct iovec'
 struct iovec {
        ^~~~~
In file included from tmux.h:27,
                 from cfg.c:28:
/boot/system/develop/headers/posix/sys/uio.h:12:16: note: originally defined here
 typedef struct iovec {
                ^~~~~
Makefile:969: recipe for target 'cfg.o' failed
make: *** [cfg.o] Error 1

اس مرحلے پر، میں نے محسوس کیا کہ کسی پروگرام کو ہائیکو میں پورٹ کرنے کے لیے اس سے کہیں زیادہ علم کی ضرورت ہوتی ہے جو ایک سادہ تعمیر نو کے لیے درکار ہے۔
میں نے دوستانہ ہائیکو ڈویلپرز سے بات کی، پتہ چلا کہ msgpack میں ایک بگ ہے، اور چند منٹوں کے بعد مجھے ہائیکو پورٹس میں ایک پیچ نظر آتا ہے۔ میں اپنی آنکھوں سے دیکھ سکتا ہوں کہ پیکج کو کس طرح درست کیا گیا۔ یہاں جا رہا ہے (buildslave - ورچوئل مشینیں)۔

ہائیکو کے ساتھ میرا پانچواں دن: آئیے کچھ پروگرام پورٹ کرتے ہیں۔
بلڈ ماسٹر پر درست میسج پیک بنانا

درمیان کے اوقات میں میں اپ اسٹریم پر ایک پیچ بھیجتا ہوں۔ msgpack میں ہائیکو سپورٹ شامل کرنے کے لیے.

پانچ منٹ بعد، تازہ ترین میسج پیک ہائیکو میں پہلے سے ہی دستیاب ہے:

/Haiku/home/tmate> pkgman update
(...)
The following changes will be made:
  in system:
    upgrade package msgpack_c_cpp-3.1.1-1 to 3.2.0-2 from repository HaikuPorts
    upgrade package msgpack_c_cpp_devel-3.1.1-1 to 3.2.0-2 from repository HaikuPorts
Continue? [yes/no] (yes) : y
100% msgpack_c_cpp-3.2.0-2-x86_64.hpkg [13.43 KiB]
(...)
[system] Done.

غیر متوقع طور پر اچھا۔ کیا میں نے یہی کہا؟!

میں اصل مسئلہ کی طرف واپس آتا ہوں:

/Haiku/home/tmate> make
(...)
In file included from tmux.h:40,
                 from tty.c:32:
compat.h:266: warning: "AT_FDCWD" redefined
 #define AT_FDCWD -100

In file included from tty.c:25:
/boot/system/develop/headers/posix/fcntl.h:62: note: this is the location of the previous definition
 #define AT_FDCWD  (-1)  /* CWD FD for the *at() functions */

tty.c: In function 'tty_init_termios':
tty.c:278:48: error: 'IMAXBEL' undeclared (first use in this function); did you mean 'MAXLABEL'?
  tio.c_iflag &= ~(IXON|IXOFF|ICRNL|INLCR|IGNCR|IMAXBEL|ISTRIP);
                                                ^~~~~~~
                                                MAXLABEL
tty.c:278:48: note: each undeclared identifier is reported only once for each function it appears in
Makefile:969: recipe for target 'tty.o' failed
make: *** [tty.o] Error 1

اب ایسا لگتا ہے کہ msgpack کی غلطی نہیں ہے۔ میں تبصرہ کر رہا ہوں۔ IMAXLABEL в tty.c تو:

tio.c_iflag &= ~(IXON|IXOFF|ICRNL|INLCR|IGNCR|/*IMAXBEL|*/ISTRIP);

نتیجہ:

osdep-unknown.c: In function 'osdep_get_cwd':
osdep-unknown.c:32:19: warning: unused parameter 'fd' [-Wunused-parameter]
 osdep_get_cwd(int fd)
               ~~~~^~
make: *** No rule to make target 'compat/forkpty-unknown.c', needed by 'compat/forkpty-unknown.o'.  Stop.

ٹھیک ہے، ہم پھر چلتے ہیں... ویسے:

/Haiku/home/tmate> ./configure | grep -i OPENAT
checking for openat... no

مسٹر. waddlesplash آپ کو بتاتا ہے کہ کہاں کھودنا ہے:

/Haiku/home/tmate> ./configure LDFLAGS="-lbsd"
(...)/Haiku/home/tmate> make
(...)
In file included from tmux.h:40,
                 from window.c:31:
compat.h:266: warning: "AT_FDCWD" redefined
 #define AT_FDCWD -100

In file included from window.c:22:
/boot/system/develop/headers/posix/fcntl.h:62: note: this is the location of the previous definition
 #define AT_FDCWD  (-1)  /* CWD FD for the *at() functions */

make: *** No rule to make target 'compat/forkpty-unknown.c', needed by 'compat/forkpty-unknown.o'.  Stop.

یہاں میں نے پوسٹ کیا۔ config.log.

انہوں نے مجھے سمجھایا کہ ہائیکو پر libresolv کے علاوہ libnetwork میں کچھ اور بھی ہے۔ بظاہر کوڈ میں مزید ترمیم کرنے کی ضرورت ہے۔ سوچنے کی ضرورت ہے…

find . -type f -exec sed -i -e 's|lresolv|lnetwork|g'  {} ;

ابدی سوال: کیا ہو رہا ہے؟

/Haiku/home/tmate> ./configure LDFLAGS="-lbsd"
(...)/Haiku/home/tmate> make
(...)
# Success!# Let's run it:/Haiku/home/tmate> ./tmate
runtime_loader: /boot/system/lib/libssh.so.4.7.2: Could not resolve symbol '__stack_chk_guard'
resolve symbol "__stack_chk_guard" returned: -2147478780
runtime_loader: /boot/system/lib/libssh.so.4.7.2: Troubles relocating: Symbol not found

وہی چیز، صرف پروفائل میں۔ گوگلڈ اور یہ پایا. اگر آپ شامل کریں۔ -lssp "کبھی کبھی" مدد کرتا ہے، میں کوشش کرتا ہوں:

/Haiku/home/tmate> ./configure LDFLAGS="-lbsd -lssp"
(...)/Haiku/home/tmate> make
(...)/Haiku/home/tmate> ./tmate

زبردست! یہ شروع ہو رہا ہے! لیکن…

[tmate] ssh.tmate.io lookup failure. Retrying in 2 seconds (non-recoverable failure in name resolution)

میں ڈیبگ کرنے کی کوشش کروں گا۔ فائل یہاں:

/Haiku/home/tmate> strace -f ./tmate >log 2>&1

"خراب پورٹ ID" پہلے سے ہی بزنس کارڈ کی طرح ہے۔ ہائیکو. ہوسکتا ہے کہ کسی کو اندازہ ہو کہ کیا غلط ہے اور اسے کیسے ٹھیک کیا جائے؟ اگر ایسا ہے تو، میں مضمون کو اپ ڈیٹ کروں گا۔ سے لنک کریں۔ GitHub کے.

GUI ایپلیکیشن کو Qt پر پورٹ کرنا۔

میں ایک سادہ QML ایپلیکیشن کا انتخاب کرتا ہوں۔

/> cd /Haiku/home//Haiku/home> git clone https://github.com/probonopd/QtQuickApp
/Haiku/home/QtQuickApp> qmake .
/Haiku/home/QtQuickApp> make
/Haiku/home/QtQuickApp> ./QtQuickApp # Works!

واقعی سادہ۔ ایک منٹ سے بھی کم!

haikuporter اور haikuports کا استعمال کرتے ہوئے hpkg میں پیکیجنگ ایپلی کیشنز۔

میں کس چیز سے شروع کروں؟ کوئی سادہ دستاویز نہیں ہے، میں irc.freenode.net پر #haiku چینل پر جاتا ہوں اور سنتا ہوں:

  • ٹیم package - پیکجز بنانے کا ایک نچلی سطح کا طریقہ۔ زیادہ تر حصے کے لیے، PackageInfo اس کے لیے کافی ہے، جیسا کہ "اسے ایک مناسب .hpkg پیکیج میں بنانا" کے سیکشن میں بیان کیا گیا ہے۔
  • مجھے کچھ کرنا ہے۔ اس طرح
  • آپ استعمال کر سکتے ہیں hpkg-creator (یہ میرے لیے ٹوٹ جاتا ہے، غلطی کی اطلاع)

یہ واضح نہیں ہے کہ کیا کرنا ہے۔ میرا اندازہ ہے کہ مجھے ہیلو ورلڈ طرز کے ابتدائی رہنما کی ضرورت ہے، مثالی طور پر ایک ویڈیو۔ یہ اچھا ہو گا کہ ہائیکو پورٹر کا بھی آسان تعارف ہو، جیسا کہ GNU ہیلو میں کیا گیا ہے۔

میں مندرجہ ذیل پڑھ رہا ہوں:

haikuporter ہائیکو کے لیے عام پیکج پروجیکٹس بنانے کا ایک ٹول ہے۔ یہ ہائیکو پورٹس کے ذخیرے کو تمام پیکجوں کی بنیاد کے طور پر استعمال کرتا ہے۔ Haikuporter کی ترکیبیں پیکجز بنانے کے لیے استعمال کی جاتی ہیں۔

اس کے علاوہ، مجھے پتہ چلا کہ:

ہائیکو پورٹس اسٹوریج میں ترکیبیں ذخیرہ کرنے کی ضرورت نہیں ہے۔ آپ ایک اور ذخیرہ بنا سکتے ہیں، اس میں ترکیبیں ڈال سکتے ہیں، اور پھر ہائیکوپورٹر کو اس کی طرف اشارہ کر سکتے ہیں۔

بس مجھے جس کی ضرورت ہے - اگر پیکیج کو عوامی طور پر جاری کرنے کا کوئی طریقہ تلاش نہیں کر رہا ہوں۔ لیکن یہ ایک اور پوسٹ کا موضوع ہے۔

ہائیکوپورٹر اور ہائیکوپورٹس انسٹال کرنا

cd /boot/home/
git clone https://github.com/haikuports/haikuporter --depth=50
git clone https://github.com/haikuports/haikuports --depth=50
ln -s /boot/home/haikuporter/haikuporter /boot/home/config/non-packaged/bin/ # make it runnable from anywhere
cd haikuporter
cp haikuports-sample.conf /boot/home/config/settings/haikuports.conf
sed -i -e 's|/mydisk/haikuports|/boot/home/haikuports|g' /boot/home/config/settings/haikuports.conf

ایک نسخہ لکھنا

SUMMARY="Demo QtQuick application"
DESCRIPTION="QtQuickApp is a demo QtQuick application for testing Haiku porting and packaging"
HOMEPAGE="https://github.com/probonopd/QtQuickApp"
COPYRIGHT="None"
LICENSE="MIT"
REVISION="1"
SOURCE_URI="https://github.com/probonopd/QtQuickApp.git"
#PATCHES=""
ARCHITECTURES="x86_64"
PROVIDES="
    QtQuickApp = $portVersion
"
REQUIRES="
    haiku
"
BUILD_REQUIRES="
    haiku_devel
    cmd:qmake
"BUILD()
{
    qmake .
    make $jobArgs
}INSTALL()
{
    make install
}

ترکیب کو جمع کرنا

میں فائل کو نام سے محفوظ کرتا ہوں۔ QtQuickApp-1.0.recipe، جس کے بعد میں لانچ کرتا ہوں۔ aikuporter -S ./QuickApp-1.0.recipe. ریپوزٹری میں تمام پیکجوں کے لیے انحصار کی جانچ پڑتال کی جاتی ہے۔ ہائیکوپورٹس، جس میں کچھ وقت لگتا ہے۔ میں کافی لینے جاؤں گا۔

زمین پر یہ چیک میری مقامی مشین پر کیوں کیا جانا چاہئے، اور مرکزی طور پر ہر ایک کے لئے ایک بار سرور پر نہیں؟

مسٹر کے مطابق waddlesplash:

اس طرح کہ آپ کسی بھی فائل کو ریپوزٹری میں دوبارہ لکھ سکتے ہیں

~/QtQuickApp> haikuporter  QtQuickApp-1.0.recipe
Checking if any dependency-infos need to be updated ...
Looking for stale dependency-infos ...
Error: QtQuickApp not found in repository

اس سے پتہ چلتا ہے کہ ایسی کوئی چیز نہیں ہے جیسے ایک باقاعدہ ریسیپی فائل جس میں آپ کی درخواست کا سورس کوڈ ہو۔ آپ کو اسے ہائیکو پورٹ فارمیٹ میں ایک ذخیرہ میں رکھنے کی ضرورت ہے۔

~/QtQuickApp> mv QtQuickApp-1.0.recipe ../haikuports/app-misc/QtQuickApp/
~/QtQuickApp> ../haikuport
~/QtQuickApp> haikuporter -S QtQuickApp-1.0.recipe

یہ حقیقت اسمبلی کو مزید بوجھل بنا دیتی ہے۔ مجھے یہ خاص طور پر پسند نہیں ہے، لیکن مجھے لگتا ہے کہ یہ ضروری ہے تاکہ بالآخر تمام اوپن سورس سافٹ ویئر ہائیکو پورٹس میں ظاہر ہوں۔

مجھے درج ذیل ملتا ہے:

~/QtQuickApp> haikuporter -S QtQuickApp-1.0.recipe
Checking if any dependency-infos need to be updated ...
        updating dependency infos of QtQuickApp-1.0
Looking for stale dependency-infos ...
Error: QtQuickApp-1.0.recipe not found in tree.

کیا غلط ہے؟ irc پڑھنے کے بعد میں کرتا ہوں:

~/QtQuickApp> haikuporter -S QtQuickApp
Checking if any dependency-infos need to be updated ...
        updating dependency infos of QtQuickApp-1.0
Looking for stale dependency-infos ...
----------------------------------------------------------------------
app-misc::QtQuickApp-1.0
        /boot/home/haikuports/app-misc/QtQuickApp/QtQuickApp-1.0.recipe
----------------------------------------------------------------------Downloading: https://github.com/probonopd/QtQuickApp.git ...
--2019-07-14 16:12:44--  https://github.com/probonopd/QtQuickApp.git
Resolving github.com... 140.82.118.3
Connecting to github.com|140.82.118.3|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://github.com/probonopd/QtQuickApp [following]
--2019-07-14 16:12:45--  https://github.com/probonopd/QtQuickApp
Reusing existing connection to github.com:443.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘/boot/home/haikuports/app-misc/QtQuickApp/download/QtQuickApp.git’
     0K .                                                     1.34M=0.06s
2019-07-14 16:12:45 (1.34 MB/s) - ‘/boot/home/haikuports/app-misc/QtQuickApp/download/QtQuickApp.git’ saved [90094]
Validating checksum of QtQuickApp.git
Warning: ----- CHECKSUM TEMPLATE -----
Warning: CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"
Warning: -----------------------------
Error: No checksum found in recipe!

ایک دلچسپ سوال پیدا ہوا ہے۔ اگر میں نسخہ میں چیکسم شامل کرتا ہوں - کیا یہ مسلسل انضمام کے لئے تازہ ترین گٹ کمٹ سے مماثل ہے؟ (ڈیولپر تصدیق کرتا ہے: "یہ کام نہیں کرے گا۔ ترکیبیں نسبتاً مستحکم ہونے کے لیے تیار کی گئی ہیں۔")

تفریح ​​​​کے لئے، ہدایت میں شامل کریں:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

اب بھی مطمئن نہیں:

~/QtQuickApp> haikuporter -S QtQuickApp
Checking if any dependency-infos need to be updated ...
        updating dependency infos of QtQuickApp-1.0
Looking for stale dependency-infos ...
----------------------------------------------------------------------
app-misc::QtQuickApp-1.0
        /boot/home/haikuports/app-misc/QtQuickApp/QtQuickApp-1.0.recipe
----------------------------------------------------------------------
Skipping download of source for QtQuickApp.git
Validating checksum of QtQuickApp.git
Unpacking source of QtQuickApp.git
Error: Unrecognized archive type in file /boot/home/haikuports/app-misc/QtQuickApp/download/QtQuickApp.git

وہ کیا کر رہا ہے؟ سب کے بعد، یہ ایک گٹ ذخیرہ ہے، کوڈ پہلے سے ہی براہ راست ہے، پیک کھولنے کے لئے کچھ بھی نہیں ہے. میرے نقطہ نظر سے، ٹول اتنا ہوشیار ہونا چاہئے کہ اگر یہ GitHub url کے اوپر ہے تو اسے unpacker کی تلاش نہ کرے۔

شاید uri git:// کام کرے گا۔

SOURCE_URI="git://github.com/probonopd/QtQuickApp.git"

اب یہ اس طرح شکایت کرتا ہے:

Downloading: git://github.com/probonopd/QtQuickApp.git ...
Error: Downloading from unsafe sources is disabled in haikuports.conf!

ہمم، سب کچھ اتنا پیچیدہ کیوں ہے، آپ "صرف کام" کیوں نہیں کر سکتے؟ سب کے بعد، یہ GitHub سے کچھ بنانا غیر معمولی نہیں ہے. چاہے وہ ٹولز ہوں جو فوراً کام کرتے ہیں، سیٹ اپ کی ضرورت کے بغیر، یا جیسا کہ میں اسے "fussing" کہتا ہوں۔

شاید یہ اس طرح کام کرے گا:

SOURCE_URI="git+https://github.com/probonopd/QtQuickApp.git"

Nope کیا. مجھے اب بھی یہ عجیب غلطی ملتی ہے اور کرتا ہوں، جیسا کہ یہاں بیان کیا گیا ہے۔

sed -i -e 's|#ALLOW_UNSAFE_SOURCES|ALLOW_UNSAFE_SOURCES|g' /boot/home/config/settings/haikuports.conf

میں تھوڑا آگے بڑھ رہا ہوں، لیکن یہ مجھ پر کیوں چیخ رہا ہے (GitHub محفوظ نہیں ہے!) اور پھر بھی کچھ کھولنے کی کوشش کر رہا ہوں۔

کے مطابق مسٹر. waddlesplash:

ٹھیک ہے، ہاں، وجہ اسمبلی کے لیے موصول ہونے والے ڈیٹا کی سالمیت کو جانچنے کی خواہش تھی۔ آپشنز میں سے ایک آرکائیو کے چیکسم کی تصدیق کرنا ہے، لیکن آپ یقیناً انفرادی فائلوں کو ہیش کر سکتے ہیں، جو لاگو نہیں ہوں گی، کیونکہ یہ بہت زیادہ وقت لگتا ہے. اس کا نتیجہ گٹ اور دیگر VCS کا "عدم تحفظ" ہے۔ غالباً ہمیشہ ایسا ہی ہوتا ہے، کیونکہ GitHub پر آرکائیو بنانا کافی آسان اور اکثر تیز ہوتا ہے۔ ٹھیک ہے، مستقبل میں، شاید غلطی کا پیغام اتنا چمکدار نہیں ہوگا... (ہم اب ایسی ترکیبیں ہائیکو پورٹس میں ضم نہیں کرتے)

~/QtQuickApp> haikuporter -S QtQuickApp
Checking if any dependency-infos need to be updated ...
Looking for stale dependency-infos ...
----------------------------------------------------------------------
app-misc::QtQuickApp-1.0
        /boot/home/haikuports/app-misc/QtQuickApp/QtQuickApp-1.0.recipe
----------------------------------------------------------------------Downloading: git+https://github.com/probonopd/QtQuickApp.git ...
Warning: UNSAFE SOURCES ARE BAD AND SHOULD NOT BE USED IN PRODUCTION
Warning: PLEASE MOVE TO A STATIC ARCHIVE DOWNLOAD WITH CHECKSUM ASAP!
Cloning into bare repository '/boot/home/haikuports/app-misc/QtQuickApp/download/QtQuickApp.git'...
Unpacking source of QtQuickApp.git
tar: /boot/home/haikuports/app-misc/QtQuickApp/work-1.0/sources/QtQuickApp-1.0: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
Command 'git archive HEAD | tar -x -C "/boot/home/haikuports/app-misc/QtQuickApp/work-1.0/sources/QtQuickApp-1.0"' returned non-zero exit status 2

پرانی عادت سے، میں irc.freenode.net نیٹ ورک پر #haiku چینل پر اچھے لوگوں سے پوچھتا ہوں۔ اور میں ان کے بغیر کہاں رہوں گا؟ اشارے کے بعد، میں نے محسوس کیا کہ مجھے استعمال کرنا چاہیے:

srcGitRev="d0769f53639eaffdcd070bddfb7113c04f2a0de8"
SOURCE_URI="https://github.com/probonopd/QtQuickApp/archive/$srcGitRev.tar.gz"
SOURCE_DIR="QtQuickApp-$srcGitRev"
CHECKSUM_SHA256="db8ab861cfec0ca201e9c7b6c0c9e5e828cb4e9e69d98e3714ce0369ba9d9522"

ٹھیک ہے، یہ واضح ہو گیا کہ یہ کیا کرتا ہے - یہ ایک مخصوص نظرثانی کے سورس کوڈ کے ساتھ ایک آرکائیو ڈاؤن لوڈ کرتا ہے۔ یہ میرے نقطہ نظر سے احمقانہ ہے، اور بالکل وہی نہیں جو میں چاہتا تھا، یعنی ماسٹر برانچ سے تازہ ترین نظرثانی ڈاؤن لوڈ کرنا۔

ڈویلپرز میں سے ایک نے اس کی وضاحت اس طرح کی:

ہمارے پاس اپنا اپنا CI ہے، لہذا ہر وہ چیز جو haikuports کے ذخیرے میں رکھی گئی ہے تمام صارفین کے لیے پیک کر دی جائے گی، اور ہم "ہر چیز کو تازہ ترین ورژن اپ اسٹریم میں" جمع کرنے اور ڈیلیور کرنے کا خطرہ مول نہیں لینا چاہتے۔

سمجھ گیا! کسی بھی صورت میں، یہ ہوا ہے:

waiting for build package QtQuickApp-1.0-1 to be activated
waiting for build package QtQuickApp-1.0-1 to be activated
waiting for build package QtQuickApp-1.0-1 to be activated
waiting for build package QtQuickApp-1.0-1 to be activated
waiting for build package QtQuickApp-1.0-1 to be activated
(...)

یہ اس اشتہار لامحدود کو دہراتا ہے۔ بظاہر یہ ایک غلطی ہے (کیا کوئی درخواست ہے؟ میں اسے نہیں ڈھونڈ سکا)۔

С haikuporter اور ذخیرہ ہائیکوپورٹس اس میں "صرف کام" کا احساس نہیں ہے، لیکن ایک ڈویلپر کے طور پر، ہائیکو کے ساتھ کام کرنے کے بارے میں مجھے کچھ چیزیں پسند ہیں۔ زیادہ تر حصے کے لیے، یہ اوپن بلڈ سروس سے ملتا جلتا ہے، لینکس کی تعمیر کے لیے ٹولز کا ایک سیٹ: انتہائی طاقتور، ایک منظم انداز کے ساتھ، لیکن میری چھوٹی "ہیلو ورلڈ" ایپلیکیشن کے لیے بہت زیادہ ہے۔

ایک بار پھر، مسٹر کے مطابق. waddlesplash:

درحقیقت، ہائیکو پورٹر ڈیفالٹ کے لحاظ سے کافی سخت ہے (اس کے علاوہ ایک لنٹ موڈ بھی ہے اور ساتھ ہی اسے مزید سخت بنانے کے لیے ایک سخت موڈ بھی ہے!)، لیکن صرف اس لیے کہ یہ ایسے پیکجز بناتا ہے جو کام کریں گے، نہ کہ صرف پیکجز بنانے کے۔ اسی لیے وہ غیر اعلانیہ انحصار، لائبریریوں کے صحیح طریقے سے درآمد نہ ہونے، غلط ورژن وغیرہ کے بارے میں شکایت کرتا ہے۔ مقصد یہ ہے کہ کسی بھی اور تمام مسائل کو پکڑنا، بشمول مستقبل کے مسائل، اس سے پہلے کہ صارف اس کے بارے میں جان لے (اسی وجہ سے avrdude انسٹال کرنا ممکن نہیں تھا، کیونکہ انحصار اصل میں نسخہ میں بیان کیا گیا تھا)۔ لائبریریاں صرف انفرادی پیکجز یا مخصوص SO ورژن نہیں ہیں۔ ہائیکو پورٹر اس بات کو یقینی بناتا ہے کہ عمل کے دوران غلطیوں سے بچنے کے لیے یہ سب خود ترکیبوں میں دیکھا جائے۔

اصولی طور پر، آپریٹنگ سسٹم بناتے وقت اس سطح کی سختی جائز ہے، لیکن "ہیلو ورلڈ" ایپلی کیشن کے لیے یہ میرے لیے غیر ضروری معلوم ہوتا ہے۔ میں نے کچھ اور کوشش کرنے کا فیصلہ کیا۔

"پیکیج تخلیق" کمانڈ کا استعمال کرتے ہوئے hpkg فارمیٹ میں ایپلی کیشنز بنانا

ہوسکتا ہے۔ اس کیا سادہ ہدایات میرے لیے بہتر کام کریں گی؟

mkdir -p apps/
cp QtQuickApp apps/cat >  .PackageInfo <<EOF
name QtQuickApp
version 1.0-1
architecture x86_64

summary "Demo QtQuick application"
description "QtQuickApp is a demo QtQuick application for testing Haiku porting and packaging"

packager "probono"
vendor "probono"

copyrights "probono"
licenses "MIT"

provides {
  QtQuickApp = 1.0-1
}requires {
  qt5
}
EOFpackage create -b QtQuickApp.hpkg
package add QtQuickApp.hpkg apps# See below if you also want the application
# to appear in the menu

غیر متوقع طور پر تیز، غیر متوقع طور پر آسان، غیر متوقع طور پر موثر۔ بالکل مجھے یہ کس طرح پسند ہے، حیرت انگیز!

تنصیب - کیا اور کہاں؟

QtQuickApp.hpkg فائل کو اس میں منتقل کیا۔ ~/config/packagesایک فائل مینیجر کا استعمال کرتے ہوئے، جس کے بعد QtQuickApp جادوئی طور پر ظاہر ہوا۔ ~/config/apps.
ایک بار پھر، غیر متوقع طور پر تیز، سادہ اور مؤثر. حیرت انگیز، ناقابل یقین!

لیکن ... (ہم ان کے بغیر کہاں ہوں گے!)

ایپ ابھی بھی ایپس مینو لسٹ اور کوئیک لانچ سے غائب ہے۔ مجھے لگتا ہے کہ میں پہلے ہی جانتا ہوں کہ اسے کیسے ٹھیک کرنا ہے۔ فائل مینیجر میں میں QtQuickApp.hpkg کو ~/config/packages سے /system/packages میں منتقل کرتا ہوں۔

نہیں، ابھی تک لاپتہ ہے۔ بظاہر، میں نے (اچھی طرح، اور ہدایات) کچھ یاد کیا.

کچھ دیگر ایپلی کیشنز کے لیے HaikuDepot میں "مواد" کے ٹیب کو دیکھنے کے بعد، میں نے دیکھا کہ وہاں فائلیں ہیں جیسے /data/mimedb/application/x-vnd... اس سے بھی زیادہ قابل ذکر بات کیا ہے /data/deskbar/menu/Applications/….

ٹھیک ہے، میں وہاں کیا رکھوں؟ چلو بھئی...

mkdir -p data/deskbar/menu/Applications/
( cd data/deskbar/menu/Applications ; ln -s ../../../../apps/QtQuickApp . )
package add QtQuickApp.hpkg apps data

مجھے پورا یقین ہے کہ یہ چال کام کرے گی، لیکن سوالات باقی ہیں: یہ کیوں ضروری ہے، یہ کس لیے ہے؟ میرے خیال میں اس سے مجموعی تاثر خراب ہوتا ہے کہ نظام اتنا نفیس ہے۔

جیسا کہ مسٹر نے وضاحت کی ہے۔ waddlesplash:

بعض اوقات ایسی ایپلیکیشنز ہوتی ہیں جن کی دوسری ایپلیکیشنز کو ضرورت ہوتی ہے لیکن وہ مینو میں نہیں ہوتیں۔ مثال کے طور پر، آپ کے اسکرین شاٹ میں LegacyPackageInstaller، BeOS فارمیٹ میں .pkg آرکائیوز پر کارروائی کر رہا ہے۔ میں چاہوں گا کہ صارفین انہیں انسٹال کریں، لیکن مینو میں ان کی موجودگی الجھن کا باعث بنے گی۔

کسی وجہ سے مجھے ایسا لگتا ہے کہ ایک آسان حل ہے، مثال کے طور پر Hidden=true فائلوں میں .desktop لینکس پر. کیوں نہ "پوشیدہ" معلومات کو فائل سسٹم کا وسیلہ اور وصف بنایا جائے؟

جو خاص طور پر لطیف نہیں ہے وہ (کچھ) ایپلیکیشن کا نام ہے جو مینو کو دکھاتا ہے، deskbarراستے میں سختی سے بندھے ہوئے ہیں۔

مسٹر. waddlesplash اس کی وضاحت کرتا ہے:

اس معاملے میں "ڈیسک بار" کو ایک قسم کی عام اصطلاح کے طور پر سمجھا جانا چاہئے (زیادہ تر "ٹاسک بار" کے طور پر، جو ونڈوز ایپلیکیشن اور عام تصور دونوں سے مراد ہے)۔ ٹھیک ہے، اس کے بعد سے deskbar، "ڈیسک بار" نہیں، اسے بھی اسی طرح سمجھا جا سکتا ہے۔

ہائیکو کے ساتھ میرا پانچواں دن: آئیے کچھ پروگرام پورٹ کرتے ہیں۔
2 "تقریبا ایک جیسی" ڈائریکٹریز جن میں ایپلی کیشنز ہیں۔

ایپلی کیشنز کے ساتھ 2 ڈائریکٹریز کیوں ہیں، اور یہ بھی کہ میری QtQuickApplication ایک میں کیوں ہے، لیکن دوسری میں نہیں؟ (آخر کار، یہ ایک سسٹم ون نہیں ہے، بلکہ دوسرا صارف ہے، جو میرے لیے ذاتی طور پر قابل فہم ہوگا)۔
میں واقعی الجھن میں ہوں اور مجھے لگتا ہے کہ اسے متحد ہونا چاہیے۔

مسٹر کی طرف سے تبصرہ waddlesplash

ایپس کیٹلاگ میں وہ ایپلیکیشنز شامل ہیں جن کی مینو میں ضرورت نہیں ہے۔ لیکن مینو کے ساتھ صورتحال کو واقعی بہتر کرنے کی ضرورت ہے، تاکہ اسے مزید حسب ضرورت بنایا جا سکے۔

درخواست، یا یہ نہیں ہو گا 😉

میں نے سوچا: کیا واقعی میں ایپلی کیشنز کی میزبانی کرنا ضروری ہے؟ /system/appsاگر صارفین انہیں وہاں دیکھتے ہیں تو یہ ناپسندیدہ ہے۔ ہوسکتا ہے کہ انہیں کسی اور جگہ پر رکھنا بہتر ہوگا جہاں صارف ان کا سامنا نہیں کرے گا؟ جیسا کہ یہ میک OS X میں کیا گیا ہے، جہاں پیکجوں کے مواد .app، جو صارف کو اس میں نظر نہیں آنا چاہئے۔ /Applications, /System/Library/…“` کی گہرائیوں میں چھپا ہوا ہے۔

انحصار کے بارے میں کیا خیال ہے؟

مجھے لگتا ہے کہ کسی طرح انحصار کی وضاحت کرنا قابل ہے، ٹھیک ہے؟ کیا Qt کو بطور ڈیفالٹ ہائیکو کی تنصیب کا لازمی حصہ سمجھا جا سکتا ہے؟ Nope کیا! Qt بطور ڈیفالٹ انسٹال نہیں ہوتا ہے۔ کیا پیکیج بلڈر خود بخود ELF فائلوں کو چیک کرکے انحصار کا پتہ لگا سکتا ہے؟ مجھے بتایا گیا کہ ہائیکو پورٹر دراصل یہ کرتا ہے، لیکن package نہیں. اس کی وجہ یہ ہے کہ یہ صرف ایک "پیکیج بلڈر" ہے جو صرف اپنے طور پر فائلیں بناتا ہے۔ hpkg.

کیا ہائیکو کو ایک ایسی پالیسی شامل کر کے مزید نفیس بنایا جانا چاہیے کہ پیکج کا انحصار ہائیکو سے باہر کے پیکجوں پر نہیں ہونا چاہیے؟ haikuports? (میں چاہوں گا، کیونکہ اس طرح کی پالیسی چیزوں کو بہت آسان بنا دے گی - سسٹم کسی بھی جگہ سے ڈاؤن لوڈ کیے گئے ہر پیکج کے انحصار کو خود بخود حل کر سکے گا، بغیر کسی اضافی پیکیج کے ذرائع سے گڑبڑ کیے)۔

مسٹر. waddlesplash وضاحت کرتا ہے:

ہم ڈویلپرز کی آزادی کو اتنا محدود نہیں کرنا چاہیں گے، کیونکہ یہ ظاہر ہے کہ اگر CompanyX انحصار کے ساتھ سافٹ ویئر کے اپنے سیٹ کو سپورٹ کرنا چاہتی ہے (اور اس وجہ سے ایک ذخیرہ)، تو یہ مکمل طور پر آزادانہ طور پر کرے گی۔

اس صورت میں، یہ تجویز کرنے کے قابل ہو سکتا ہے کہ تھرڈ پارٹی پیکجز ایپلی کیشن کے ساتھ درکار ہر چیز کو مکمل طور پر پیک کر کے ہائیکوپورٹس میں شامل کسی بھی چیز پر انحصار کرنے سے گریز کریں۔ لیکن میرے خیال میں یہ اس سلسلے کے مستقبل کے مضمون کے لیے ایک موضوع ہے۔ [کیا مصنف AppImage کی طرف بڑھ رہا ہے؟ - تقریبا. مترجم]

ایپلیکیشن آئیکن شامل کرنا

اگر میں اپنی نئی تخلیق کردہ ایپلیکیشن کے وسائل میں صاف ستھرا بلٹ ان آئیکنز میں سے ایک کو شامل کرنا چاہتا ہوں تو کیا ہوگا؟ معلوم ہوا کہ یہ ایک حیرت انگیز موضوع ہے، اس لیے یہ اگلے مضمون کی بنیاد ہوگا۔

مسلسل ایپلیکیشن بلڈز کو کیسے منظم کیا جائے؟

انکسکیپ جیسے پروجیکٹ کا تصور کریں (ہاں، میں جانتا ہوں کہ یہ ابھی تک ہائیکو میں دستیاب نہیں ہے، لیکن اس پر ڈسپلے کرنا آسان ہے)۔ ان کے پاس سورس کوڈ کا ذخیرہ ہے۔ https://gitlab.com/inkscape/inkscape.
جب بھی کوئی اپنی تبدیلیوں کا ذخیرے میں کرتا ہے، پائپ لائنز کی تعمیر شروع کی جاتی ہے، جس کے بعد تبدیلیاں خود بخود جانچ لی جاتی ہیں، بنائی جاتی ہیں، اور ایپلیکیشن کو مختلف پیکجوں میں پیک کیا جاتا ہے، بشمول AppImage for Linux (ایک اسٹینڈ اپلی کیشن پیکج جسے مقامی جانچ کے لیے ڈاؤن لوڈ کیا جا سکتا ہے۔ سسٹم پر کیا انسٹال ہو سکتا ہے یا نہیں۔ [مجھے معلوم تھا! - تقریبا. مترجم])۔ ہر برانچ انضمام کی درخواست کے ساتھ بھی یہی ہوتا ہے، لہذا آپ انضمام کی درخواست میں تجویز کردہ کوڈ سے تیار کردہ ایپلیکیشن کو ضم کرنے سے پہلے ڈاؤن لوڈ کر سکتے ہیں۔

ہائیکو کے ساتھ میرا پانچواں دن: آئیے کچھ پروگرام پورٹ کرتے ہیں۔
درخواستوں کو بلڈ سٹیٹس اور مرتب شدہ بائنریز ڈاؤن لوڈ کرنے کی صلاحیت کے ساتھ ضم کریں اگر بلڈ کامیاب ہو (سبز رنگ میں نشان زد)

تعمیر ڈوکر کنٹینرز میں چلتی ہے۔ GitLab لینکس پر مفت رنرز پیش کرتا ہے، اور مجھے لگتا ہے کہ آپ کے اپنے رنرز کو شامل کرنا ممکن ہو سکتا ہے (ویسے، میں نہیں دیکھ رہا ہوں کہ یہ ہائیکو جیسے سسٹمز کے لیے کیسے کام کرے گا، جس کے بارے میں میں جانتا ہوں کہ اس کے پاس Docker یا اس کے مساوی نہیں ہے، لیکن فری بی ایس ڈی کے لیے بھی کوئی ڈوکر نہیں ہے، لہذا یہ مسئلہ ہائیکو کے لیے منفرد نہیں ہے)۔

مثالی طور پر، ہائیکو ایپلی کیشنز کو لینکس کے لیے ڈوکر کنٹینر کے اندر بنایا جا سکتا ہے۔ اس صورت حال میں، ہائیکو کے لیے اسمبلی کو موجودہ پائپ لائنوں میں متعارف کرایا جا سکتا ہے۔ کیا کراس کمپائلر ہیں؟ یا مجھے QEMU/KVM جیسی کوئی چیز استعمال کرتے ہوئے ڈوکر کنٹینر کے اندر تمام ہائیکو کی تقلید کرنی چاہئے (یہ فرض کرتے ہوئے کہ یہ ڈوکر کے اندر اس طرح کام کرے گا)؟ ویسے، بہت سے منصوبے اسی طرح کے اصولوں کا استعمال کرتے ہیں. مثال کے طور پر، Scribus یہ کرتا ہے - یہ ہائیکو کے لیے پہلے سے ہی دستیاب ہے۔ ایک دن وہ آئے گا جب میں بھیج سکوں گا۔ اس طرح ہائیکو سپورٹ شامل کرنے کے لیے دوسرے پروجیکٹس کی درخواستیں کھینچیں۔

ڈویلپرز میں سے ایک وضاحت کرتا ہے:

دوسرے منصوبوں کے لیے جو خود پیکجز بنانا چاہتے ہیں، باقاعدہ CMake/CPack طریقہ معاون ہے۔ پیکج کے بلڈ پروگرام کو براہ راست کال کرکے دوسرے بلڈ سسٹم کو سپورٹ کیا جاسکتا ہے، اگر لوگ اس میں دلچسپی رکھتے ہیں تو یہ ٹھیک ہے۔ تجربہ بتاتا ہے: ابھی تک زیادہ دلچسپی نہیں رہی، اس لیے ہائیکوپورٹر نے ہمارے لیے آسان کام کیا، لیکن بالآخر، دونوں طریقوں کو ایک ساتھ کام کرنا چاہیے۔ ہمیں لینکس یا کسی دوسرے سرور آپریٹنگ سسٹم سے کراس بلڈنگ سافٹ ویئر کے لیے ٹولز کا ایک سیٹ متعارف کرانا چاہیے (ہائیکو سرور پر چلنے کے لیے ڈیزائن نہیں کیا گیا ہے)۔

میں کھڑے ہو کر اوویشن دیتا ہوں۔ لینکس کے باقاعدہ صارفین یہ تمام اضافی بوجھ اور اضافی سامان (سیکیورٹی، سخت کنٹرول، وغیرہ) لے جاتے ہیں جو سرور آپریٹنگ سسٹم کے لیے ضروری ہے، لیکن ذاتی کے لیے نہیں۔ لہذا میں مکمل طور پر متفق ہوں کہ لینکس پر ہائیکو ایپس بنانے کے قابل ہونا ہی راستہ ہے۔

حاصل يہ ہوا

POSIX ایپلی کیشنز کو ہائیکو میں پورٹ کرنا ممکن ہے، لیکن ایک عام تعمیر نو سے زیادہ مہنگا ہو سکتا ہے۔ اگر یہ irc.freenode.net نیٹ ورک پر #haiku چینل کے لوگوں کی مدد کے لیے نہ ہوتا تو میں یقینی طور پر ایک طویل عرصے تک اس میں پھنس جاتا۔ لیکن یہاں تک کہ انہوں نے ہمیشہ یہ نہیں دیکھا کہ کیا غلط تھا۔

Qt میں لکھی گئی درخواستیں ایک آسان استثناء ہیں۔ میں نے بغیر کسی پریشانی کے ایک سادہ ڈیمو ایپلیکیشن کو اکٹھا کیا۔

سادہ ایپلیکیشنز کے لیے ایک پیکج بنانا بھی کافی آسان ہے، لیکن صرف "روایتی طور پر جاری کردہ" کے لیے، یعنی ورژن شدہ سورس کوڈ آرکائیوز جس کا مقصد ہائیکوپورٹس میں سپورٹ کرنا ہے۔ GitHub کے ساتھ ایک مستقل تعمیر (تبدیلیوں کے ہر عزم کے لئے تعمیر) کے لئے، ایسا لگتا ہے کہ سب کچھ اتنا آسان نہیں ہے۔ یہاں ہائیکو میک پر رزلٹ سے زیادہ لینکس ڈسٹری بیوشن کی طرح محسوس ہوتا ہے، جہاں آپ XCode میں "Build" بٹن پر کلک کرتے ہیں تو آپ کو ایک پیکیج ملتا ہے۔ .app، ڈسک امیج میں داخل کرنے کے لیے تیار ہے۔ .dmg، میری ویب سائٹ پر ڈاؤن لوڈ کے لیے تیار ہے۔
"سرور" آپریٹنگ سسٹم پر مبنی ایپلی کیشنز کی مسلسل تعمیر، مثال کے طور پر، لینکس، زیادہ تر ممکنہ طور پر ممکن ہو جائے گا اگر ڈویلپرز کی طرف سے مطالبہ ہو، لیکن اس وقت ہائیکو پروجیکٹ میں دیگر، زیادہ اہم کام ہیں۔

خود کریں! سب کے بعد، ہائیکو پراجیکٹ ڈی وی ڈی یا یو ایس بی سے بوٹنگ کے لیے تصاویر فراہم کرتا ہے۔ روزانہ. انسٹال کرنے کے لیے، صرف تصویر ڈاؤن لوڈ کریں اور اسے استعمال کرتے ہوئے فلیش ڈرائیو پر لکھیں۔ Etcher

کیا آپ کا کوئی سوال ہے؟ ہم آپ کو روسی بولنے والوں کی دعوت دیتے ہیں۔ ٹیلیگرام چینل.

خرابی کا جائزہ: اپنے آپ کو C اور C++ میں پاؤں میں گولی مارنے کا طریقہ۔ ہائیکو OS ترکیب کا مجموعہ

سے مصنف ترجمہ: یہ ہائیکو کے بارے میں سیریز کا پانچواں مضمون ہے۔

مضامین کی فہرست: سب سے پہلے دوسری تیسرا چوتھا

ماخذ: www.habr.com

نیا تبصرہ شامل کریں